gpt4 book ai didi

actionscript-3 - AS3 阻止角色穿墙

转载 作者:行者123 更新时间:2023-12-04 04:34:22 26 4
gpt4 key购买 nike

我想在电影片段撞到墙上(另一个电影片段)时停止电影片段的移动。下面的示例有效,但在碰撞之后,动画片段“阻止”了向左的所有移动......我的问题是,这是一种好方法吗?为什么效果不佳?

这段代码会有一些错误,但我正在学习。现在以左箭头键为例;

检查 key 的变量,它是否撞到墙上以及它是否在移动:

var leftArrow:Boolean;
var speed:int = 10;
var hitting:Boolean;
var ismoving:Boolean;

按键/移动和检测碰撞的事件监听器:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, walking);
stage.addEventListener(Event.ENTER_FRAME, detectHit);

检测碰撞函数:

function detectHit(e:Event) :void
{
if(char.hitTestObject(bounds))
{
hitting = true;
}
}

向左箭头键的功能:

function keyPressed(event:KeyboardEvent):void
{

if (event.keyCode == Keyboard.LEFT)
{
leftArrow = true;
}

}

function keyReleased(event:KeyboardEvent):void
{

if (event.keyCode == Keyboard.LEFT)
{
leftArrow = false;
}

}

它不起作用的原因可能在这里,但我不明白为什么不:

function walking(event:Event):void {
if (rightArrow) {
char.x += speed;
}

if (leftArrow && ! hitting) {
char.x -= speed;
}
else
{
ismoving = false
}

最佳答案

if (leftArrow && ! hitting)
如果 hitting 为假,

char 将移动。当 char.hitTestObject(bounds) 为 true 时,您将 hitting 设置为 true。您不会在任何地方再次将 hitting 设置为 false。这就是为什么一旦撞到左墙,它就会永久停止向左移动。您需要找出合适的条件来再次将 hitting 设置为 false。

detectHit 中添加一个 else 分支应该可以解决问题。

function detectHit(e:Event):void {
if(char.hitTestObject(bounds))
{
hitting = true;
} else {
hitting = false; // add this
}
}

关于actionscript-3 - AS3 阻止角色穿墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com