{有赏}求大神指导,还是老问题,八方向人物移动,且鼠标操作代码
gamemaker吧
全部回复
仅看楼主
level 1
漂流船 楼主
现在有8组动画,每组4张图片,现在寻找自动判定方向鼠标点击走路的方法,有高手加QQ526370761告知,完美解决,可赏10QB。真实可靠。
2014年10月27日 12点10分 1
level 1
漂流船 楼主
虽然不多,但是我想解决这个问题,不知道有没有大神愿意帮忙的。
2014年10月27日 12点10分 2
level 1
漂流船 楼主
这是仿照别人的代码,但是我看不懂啊,先是creat 的代码
playerindex = 0 //圆形的帧索引
mousedis = 0
facing = 0//运动方向和方向球玩家面孔
movespd = 1.6
animspd = .4
下面是移动步结束的代码:
mousedis = point_distance(mouse_x,mouse_y,x,y);
//鼠标距离=点_距离(鼠标_x,鼠标_y,x,y);?
facing = round(point_direction(mouse_x,mouse_y,x,y)/45)
//朝向 = 圆(点_方向(鼠标_x,鼠标_y,x,y)45)
if ( facing = 8 ) { facing = 0 }
//如果(变量朝向的值为8){朝向为0}
switch ( facing ) //开关 (变量朝向)
{
case 0: sprite_index = spr_zzy_left; break;
//实例 0 :精灵指数 = left;破坏;
case 1: sprite_index = spr_zzy_DL; break;
//实例 1 :精灵指数 = wallw;破坏;
case 2: sprite_index = spr_zzy_DR; break;
//实例 2 :精灵指数 = down;破坏;
case 3: sprite_index = spr_zzy_down; break;
//实例 2 :精灵指数 = wallw;破坏;
case 4: sprite_index = spr_zzy_right; break;
//实例 2 :精灵指数 = right;破坏;
case 5: sprite_index = spr_zzy_UR; break;
case 6: sprite_index = spr_zzy_up; break;
case 7: sprite_index = spr_zzy_LU; break;
}
movespd = ( mousedis * .17 );
//变量移动速度 = (鼠标距离 * .017)
if ( movespd > 2.5 ) { movespd = 2.5 }
//如果(鼠标移动速度大于2.5){移动速度为2.5}
image_speed = ( animspd );
//图片_速度 = (图片速度);
animspd = ( mousedis * .0045 );
//动画速度 = ( 鼠标速度 * 。017);
if ( animspd > .23 ) { animspd = .23 }
//如果 (动画速度大于 .23){动画速度 =。23 }
switch ( facing ) //开关 (变量朝向)
{
case 1: movespd = ( movespd*.875 ); break;
case 3: movespd = ( movespd*.875 ); break;
case 5: movespd = ( movespd*.875 ); break;
case 7: movespd = ( movespd*.875 ); break;
case 2: movespd = ( movespd*.75 ); break;
case 6: movespd = ( movespd*.75 ); break;
}
//绕过鼠标移动如果玩家鼠标距离小于6,以防止不必要的行为
if ( mousedis > 1 )
//玩家使用mp_potential一步鼠标点移动
{{ moving = 1 } { mp_potential_settings(90,1,4,0) } { mp_potential_step(mouse_x,mouse_y,movespd,solid) }}
else
//如果鼠标距离小于6,防止鼠标移动
{ movespd = 0 }
最后是停止的代码
switch ( facing )
{
case 0: sprite_index = spr_zzy_left_one; break;
case 1: sprite_index = spr_DL; break;
case 2: sprite_index = spr_zzy_down_one; break;
case 3: sprite_index = spr_DR; break;
case 4: sprite_index = spr_zzy_right_one; break;
case 5: sprite_index = spr_UR; break;
case 6: sprite_index = spr_zzy_up_one; break;
case 7: sprite_index = spr_LU; break;
}
但是这个代码用的是全局鼠标按下和放开,我想要的是鼠标点击到的位置他就自动走过去,并非不松手才走,
而且这段代码我看的不是太明白,还是求大神指导下,而且有很不自然的现象
2014年10月27日 12点10分 3
level 1
漂流船 楼主
错了,上面那个是全局鼠标按下的,移动, 步停止是申请变量 depth为 -y。
2014年10月27日 12点10分 4
level 14
鼠标点击的时候,你要先判断一下鼠标坐标在你人物位置的方位,因为你是8组图,将坐标系评分成8份,
之后用point_direction(x,y,mouse_x,mouse_y)找出鼠标的坐标相对于人物的方向,得到角度后,判断区间,就是判断这个角度在你刚才画的那个坐标系里面的哪个区间,之后把精灵换成相对应的就可以了 。
2014年10月28日 02点10分 5
好思路[真棒]
2014年10月28日 11点10分
level 1
漂流船 楼主
那求解释,image_index 如何付给它图片,额,这样说,它接受什么类型的变量?
2014年10月29日 03点10分 6
real整数型,从0开始为图片的帧数
2014年10月29日 04点10分
回复 yiwei138 :那比如我让它播放0到3这4张图,应该怎么写?
2014年10月30日 08点10分
回复 薩呾 :if image_index < 3 image_index += 1
2014年10月30日 08点10分
回复 yiwei138 :那不按顺序呢?比如4到7,这些image在一个精灵里,总有个范围吧,恕我脑袋愚笨,一个数如何实现0到3或者4到7,
2014年10月31日 08点10分
level 10
image_index = 开始帧数
while(image_index<目标帧数)
image_index += 1
2014年10月31日 12点10分 7
1