AS健康码问题



好。我是AS3的新手,所以请耐心等待。我的健康码少了一些东西。健康减少一,但只有当障碍物第一次被击中时。最终结果是在比赛结束时得到19分——即使每次都碰到障碍物。这是我的密码。如果能在这里得到帮助,我将不胜感激。

var hitObstacle:Boolean=false; // keeps track if obstacle is hit
var health=20; 
health_txt.text=health.toString();

stage.addEventListener(KeyboardEvent.KEY_DOWN, jump);
function jump(e:KeyboardEvent):void {
jumpman_mc.play();
}
stage.addEventListener(Event.ENTER_FRAME, gameloop);
function gameloop(e:Event):void{
obstacle_mc.x-=20;
if (obstacle_mc.x<-100){
obstacle_mc.x=650;
}
if (jumpman_mc.hitTestObject(obstacle_mc)) {
if (hitObstacle==false){ //only subtract health if hitObstacle is false
health--;
}
hitObstacle=true;
health_txt.text=health.toString();
}
}

我还不能发表评论,因为我没有足够的声誉。

但是哈哈,这里的人太卑鄙了。"我们不是来解决任何问题的,走开"。难道他们不记得什么时候他们一点线索都没有吗?

好吧,你需要做的第一件事就是调试你的代码。您需要检查您编写的代码是否真的被调用了。您可以通过简化添加跟踪(")并在运行应用程序时检查控制台来实现这一点。如果你学会了这样做,你就能一眼就能发现这样的问题。

看起来问题是你创建的hitObstructure布尔值。你写道,只有当hitObstruct为false时,健康才会被减去。然后在第一次hitTest之后将其设置为true,但从未将其设置回false。这将永远给你20-1的健康。不管怎样,这个变量的意义是什么?我会把它全部删除。

if (jumpman_mc.hitTestObject(obstacle_mc)) {
    health--;
    health_txt.text=health.toString();
}

如果这没有帮助,那么调试您的代码!=)

看起来您没有将"hitObstruct"的值设置回false。

我假设您将"hitObstructure"设置为true是为了避免在物体接触时健康持续下降。

相反,我建议删除"hitObstruct"并移动舞台上的"obstacle_mc",以便hitTest在被击中后评估为false,例如

if (jumpman_mc.hitTestObject(obstacle_mc)) {
    health --;
    obstacle_mc.x = 650;
}

最新更新