如何在跳跃时旋转我的角色(Gamemaker Studio 2)



我想制作一个简单的动画,让角色在跳跃时旋转。我正在制作一个独立平台,所以我想这应该很简单,但我太新手了。这是动作代码。

//------------------------- 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), y, 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,更改该值将更改精灵的角度,并且不断增加/减少该值将模拟旋转。

但是,请记住,如果旋转精灵,精灵的点击框也会旋转。你可能可以将hitbox与sprite分开设置,这样它就不会相互干扰。

示例:https://manual.yoyogames.com/GameMaker_Language/GML_Reference/Asset_Management/Sprites/Sprite_Instance_Variables/image_angle.htm

对于玩家移动碰撞处理,您希望通过使用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, 0, 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;
}

另一种可以避免图像角度影响碰撞的方法是

var _angle = image_angle;
image_angle += image_offset;
draw_self();
image_angle = _angle;

最新更新