我的ActionScript程序很奇怪

时间:2015-09-16 08:29:51

标签: actionscript-3

我最近开始尝试使用ActionScript进行编程几年后没有使用它,我开始使用Pong,因为这似乎是一个简单的游戏来实现,但是我的(非常简陋的)代码将球从顶部反弹并且底壁由于某种原因卡在顶壁上上下弹跳......

有人可以帮忙吗?

import flash.events.Event;

stage.addEventListener(Event.ENTER_FRAME, mov);

var ySpeed:int = -5;

function mov(e:Event) {
        trace(ySpeed + " " + ball.y);
        ball.y += ySpeed;
        if (ySpeed < 0 && ball.y <= 0) {
                ySpeed *= -1;
        }
        if (ySpeed > 0 && ball.y >= 360) {
                ySpeed *= -1;
        }
}

1 个答案:

答案 0 :(得分:0)

您的代码似乎是在不断切换速度向量,因为“击中”&#39;事件不断被触发。

有一些方法可以解决这个问题   - 积极推迟“击中”#39;方法(您的&#39; if&#39;陈述)   - 在碰到之前跟踪对象行进的方向,然后将其用作if语句中的附加比较参数   - 在冲击开关上,速度矢量PLUS&#39;反弹&#39;物体略微远离撞击边缘

我还建议将if语句链接起来,以便在第一个更改值后触发第二个。

我已稍微调整了代码,以考虑球和舞台的尺寸。

类似的东西:

import flash.events.Event;

stage.addEventListener(Event.ENTER_FRAME, mov);

var dirY:int = -1;
var ySpeed:int = -5;
var ballR:uint = ball.height/2;

function mov(e:Event) {
    trace(ySpeed + " " + ball.y);

    if (ySpeed < 0 && ball.y <= (0+ballR) && dirY == -1) {
        dirY = 1;
        ySpeed *= -1;
        ball.y = 0 + ballR;
    } else if (ySpeed > 0 && ball.y >= (stage.stageHeight-+ballR) && dirY == 1) {
        dirY = -1
        ySpeed *= -1;
        ball.y = stage.stageHeight - ballR;
    }

    ball.y += ySpeed;
}