sprite_index gamemaker studio 2 (GML) 不工作
sprite_index not working gamemaker studio 2 (GML)
我有一个小脚本可以在我按下某个键时更改 sprite 索引。
if (key_right)
{
sprite_index = playerRightSpr;//<-------------
image_speed = 1; //|
} //|
if (key_left) //|
{ //|
sprite_index = playerLeftSpr; //|
image_speed = 1; //|
} //|
if (key_left) && (key_right) //|
{ //|
sprite_index = playerSpr; //|
image_speed = 0; //|
} //|
if (!key_right or key_left) //add this and this, doesn't work
{ //but it does when I remove this code.
sprite_index = playerSpr;
image_speed = 0;
}
有没有另一种说法,当站着不动时制作 sprite playerSpr,因为我尝试的方式似乎会引起冲突。
提前致谢
博迪
如果您的实体移动,您可以使用速度变量来实现。
例如:
如果你的实体有正速度(向右走)你将使用 PlayerRightSpr
如果你的实体有负速度(向左走)你将使用 PlayerLeftSpr
如果速度为 0,则使用 PlayerSpr
(您也可以使用 image_xscale 而不是使用两个不同的精灵)
image_xscale = 1; (normal sprite)
image_xscale = -1; (flip on x axis : mirror)
最后代替这个:
if (!key_right or key_left)
使用这个:
if (!key_right || !key_left)
或者这个:
if (key_right == 0 || key_left == 0)
但你是对的,这不是正确的方法
希望这样好
这是我的第二个解决方案。这是我自己的项目,所以它确实需要更改整个代码。
我已经在每行旁边用注释解释了每个部分。
步骤事件:
var hinput = 0; //hinput = Horizontal Input
hinput = keyboard_check(vk_right) - keyboard_check(vk_left); //the trick I've used to declare the movement system, based on the arrow keys.
//pressing right = 1, pressing left = -1, pressing both or none = 0.
if (hinput != 0) //it is not 0, so the player is moving
{
sprite_index = s_player_walk; //changes the current sprite to the walking animation
image_xscale = hinput; //changes the direction it's facing: 1 = right, -1 = left.
//when it's 0, it keeps the last direction it faced.
}
else //the player is not moving
{
sprite_index = s_player_idle; //changes the current sprite to the idle animation
}
至于图像本身。我为此使用了 2 个单独的精灵:
s_player_idle
,仅存在 1 帧,
s_player_walk
,存在 3 个循环帧。
图像速度已经在图像编辑器中为每个单独的精灵定义,因此不需要在代码中再次定义。
我有一个小脚本可以在我按下某个键时更改 sprite 索引。
if (key_right)
{
sprite_index = playerRightSpr;//<-------------
image_speed = 1; //|
} //|
if (key_left) //|
{ //|
sprite_index = playerLeftSpr; //|
image_speed = 1; //|
} //|
if (key_left) && (key_right) //|
{ //|
sprite_index = playerSpr; //|
image_speed = 0; //|
} //|
if (!key_right or key_left) //add this and this, doesn't work
{ //but it does when I remove this code.
sprite_index = playerSpr;
image_speed = 0;
}
有没有另一种说法,当站着不动时制作 sprite playerSpr,因为我尝试的方式似乎会引起冲突。 提前致谢 博迪
如果您的实体移动,您可以使用速度变量来实现。 例如:
如果你的实体有正速度(向右走)你将使用 PlayerRightSpr
如果你的实体有负速度(向左走)你将使用 PlayerLeftSpr
如果速度为 0,则使用 PlayerSpr
(您也可以使用 image_xscale 而不是使用两个不同的精灵)
image_xscale = 1; (normal sprite)
image_xscale = -1; (flip on x axis : mirror)
最后代替这个:
if (!key_right or key_left)
使用这个:
if (!key_right || !key_left)
或者这个:
if (key_right == 0 || key_left == 0)
但你是对的,这不是正确的方法
希望这样好
这是我的第二个解决方案。这是我自己的项目,所以它确实需要更改整个代码。
我已经在每行旁边用注释解释了每个部分。
步骤事件:
var hinput = 0; //hinput = Horizontal Input
hinput = keyboard_check(vk_right) - keyboard_check(vk_left); //the trick I've used to declare the movement system, based on the arrow keys.
//pressing right = 1, pressing left = -1, pressing both or none = 0.
if (hinput != 0) //it is not 0, so the player is moving
{
sprite_index = s_player_walk; //changes the current sprite to the walking animation
image_xscale = hinput; //changes the direction it's facing: 1 = right, -1 = left.
//when it's 0, it keeps the last direction it faced.
}
else //the player is not moving
{
sprite_index = s_player_idle; //changes the current sprite to the idle animation
}
至于图像本身。我为此使用了 2 个单独的精灵:
s_player_idle
,仅存在 1 帧,
s_player_walk
,存在 3 个循环帧。
图像速度已经在图像编辑器中为每个单独的精灵定义,因此不需要在代码中再次定义。