问题描述
我想制作一个简单的角色在跳跃时旋转的动画。我正在制作一个独立的平台游戏,所以这应该很简单,我想,但我太新手了。 这是移动代码。
//------------------------- MOVEMENT INPUT
xMove = kRight - kLeft;
xSpd = xMove * mSpd;
ySpd += 0.65;
//------------------------- JUMP
onGround = place_meeting(x,y+1,oSolid);
if(onGround) airJump = 1;
if(kJump){
if(onGround or airJump > 0){
ySpd = -12;
airJump = 0;
}
}
//------------------------- FINAL MOVEMENT
if(place_meeting(x + xSpd,y,oSolid)){
while(!place_meeting(x + sign(xSpd),oSolid)) x += sign(xSpd);
xSpd = 0;
}
if(place_meeting(x + xSpd,y + ySpd,oSolid)){
while(!place_meeting(x + xSpd,y + sign(ySpd),oSolid)) y += sign(ySpd);
ySpd = 0;
}
x += xSpd;
y += ySpd;
if xSpd < 0 dir = -1;
if xSpd > 0 dir = 1;
播放器是一个简单的正方形,所以我想让它在空中旋转 360 度。
解决方法
您应该可以为此使用 image_angle
,更改值将更改精灵的角度,并且不断增加/减少该值将模拟旋转。
但是,请记住,如果您旋转精灵,精灵的碰撞箱也会旋转。您可以将碰撞盒与精灵分开设置,这样它就不会相互干扰。
,对于玩家运动碰撞处理,您希望通过使用 draw_sprite_ext 函数使用您自己的图像旋转变量来避免使用 image_angle 变量。此外,通过更改,您最终想要使用图像角度来做任何事情,如果您尝试使用 fov 和其他什么不使用,那么最好在以后将其包裹起来。
例如
function Scr_Player_Create(){
image_offset = 0;
}
function Scr_Player_Step(){
image_offset += (keyboard_check(vk_right) - keyboard_check(vk_left)) * 10;
image_offset = wrap(image_offset,359);
}
function Scr_Player_Draw(){
draw_sprite_ext( sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle + image_offset,image_blend,image_alpha );
draw_text(10,10,image_offset);
}
function wrap(wrap_value,wrap_minimum,wrap_maximum){
// Credit: Juju from GMLscripts forums!
var _mod = ( wrap_value - wrap_minimum ) mod ( wrap_maximum - wrap_minimum );
if ( _mod < 0 ) return _mod + wrap_maximum else return _mod + wrap_minimum;
}
您可以采取的另一种避免 image_angle 影响碰撞的方法是
var _angle = image_angle;
image_angle += image_offset;
draw_self();
image_angle = _angle;