AS3-滚球游戏始终显示错误#1009



我是新手的,所以我敢肯定,对正在发生的事情有一个简单的解决方案,但是我无法弄清楚它可以挽救我的生命。

我正在尝试创建一个游戏,将球滚入一个孔中,然后您的分数增加,然后进入一个新的水平。无论我做什么,当第一个球滚入第一个洞时,游戏就会窒息并停止跑步,即使我(认为)我告诉它要前进到下一帧。

我的代码在这里 -


import flash.events.Event;
var accelX:Number;
var accelY:Number;
var l2=false;
var finalscore:int = 0
var fl_Accelerometer:Accelerometer = new Accelerometer();
fl_Accelerometer.addEventListener(AccelerometerEvent.UPDATE, fl_AccelerometerUpdateHandler);

function fl_AccelerometerUpdateHandler(event:AccelerometerEvent):void
{
accelX = event.accelerationX;
accelY = event.accelerationY;
}
ball1.addEventListener(Event.ENTER_FRAME, movecircle);

function movecircle(evt:Event){
ball1.x -= accelX*30;
ball1.y += accelY*30;
if (l2==false) {
    if (ball1.hitTestObject(right1)) {
        result1.text="Yes!";
        ball1.alpha=0;
        l2=true;}
    else if (ball1.hitTestObject(wrong1))
            {result1.text="No!";}
if(ball1.x > (stage.stageWidth-ball1.width/2)){
    ball1.x = stage.stageWidth-ball1.width/2;   }
if(ball1.x < (0+ball1.width/2)){
    ball1.x = 0+ball1.width/2;  }
if(ball1.y > (stage.stageHeight-ball1.width/2)){
   ball1.y = stage.stageHeight-ball1.width/2;   }
if(ball1.y < (0+ball1.width/2)){
    ball1.y = 0+ball1.width/2;}
}

}

如果有人想看一下,可以从我的dropbox下载.fla文件-https://dl.dropboxuserercontent.com/u/3610599/whirlyball.fla

有人可以帮我吗?就像我说的那样,我是新来的,我敢肯定我犯了很多错误,但是我一直在努力解决这个问题,但无法做到。

我真诚地感激此事。

我想我知道你要做什么。最好的解决方案可能是一些重构以使其更具动态性,这将解决每个游戏级别跳跃帧的问题。

首先,我将在每个Flash项目的开头分享我早点学习的东西 - 创建一个动作层,锁定它(您永远不想意外地放入对象),将所有ActionScript放在此层上。(仅在绝对需要的情况下,仅将脚本放在其他层上)

对于下面的代码工作,您需要执行以下操作:

  1. 创建项目的副本。打开它,删除所有帧(我们将复制我们需要的内容)
  2. 创建一个名为"动作"的图层,其中4帧,所有键框。锁定
  3. 创建一个带有4帧的称为图像的图层,所有键框
  4. 您实际上只有4个游戏状态(介绍,启动屏幕,游戏,结果)。因此,我们将从您的项目中复制到刚刚制作的项目。使用上述每个游戏状态的第一个帧,然后复制到新项目的图像层中,每个键帧都一个。复制所有是右键单击=>选择全部,右键单击=>复制。切换到下一个空框架和粘贴的图像层(右键单击=>粘贴到位)。对于帧3,只需复制球游戏的第一个实例
  5. 将下面的代码块复制到相应的动作层框架中。
  6. 在框架3中,在球对象ID,正确对象ID和错误对象ID的末端删除" 1"。他们现在应该是"球","对","错误"
  7. 在框架3中,命名问题文本对象'问题'
  8. 在框架3中,为正确的对象和错误对象打开电影剪辑,并将文本对象命名为" Textfield"。(下面说明了最后三个更改)

动作框架1:

stop();
var k = setTimeout(callback, 2000);
function callback():void {
  nextFrame();
};

动作框架2

stop();
start.addEventListener(MouseEvent.CLICK, fl_ClickToGoToNextFrame);
function fl_ClickToGoToNextFrame(event:MouseEvent):void
{
    nextFrame();
}

动作框架3

import flash.events.Event;
stop();
var questions = ["Enter question 1 here", "Enter question 2 here", "Enter question 3 here"];
var rightAnswers = ["Right1", "Right2", "Right3"];
var wrongAnswers = ["Wrong1", "Wrong2", "Wrong3"];
var level = 0;
setupLevel();

var accelX:Number;
var accelY:Number;
var finalscore:int = 0
var fl_Accelerometer:Accelerometer = new Accelerometer();
fl_Accelerometer.addEventListener(AccelerometerEvent.UPDATE, fl_AccelerometerUpdateHandler);

function fl_AccelerometerUpdateHandler(event:AccelerometerEvent):void
{
    accelX = event.accelerationX;
    accelY = event.accelerationY;
}
function setupLevel(){
    ball.addEventListener(Event.ENTER_FRAME, movecircle);
    //reset ball
    ball.x = 215;
    ball.y = 452;
    ball.alpha = 1; 
    question.text = questions[level];
    right.textfield.text= rightAnswers[level];
    wrong.textfield.text = wrongAnswers[level];
}

function movecircle(evt:Event){
    ball.x -= accelX*30;
    ball.y += accelY*30;
    if (ball.hitTestObject(right)) {
        ball.removeEventListener(Event.ENTER_FRAME, movecircle); //prevent unwanted triggers
        result1.text="Yes!";
        ball.alpha=0;
        setTimeout(gotoNextLevel,2000)
    }
    else if (ball.hitTestObject(wrong)){
        result1.text="No!";}
    if(ball.x > (stage.stageWidth-ball.width/2)){
        ball.x = stage.stageWidth-ball.width/2; }
    if(ball.x < (0+ball.width/2)){
        ball.x = 0+ball.width/2;    }
    if(ball.y > (stage.stageHeight-ball.width/2)){
       ball.y = stage.stageHeight-ball.width/2; }
    if(ball.y < (0+ball.width/2)){
        ball.y = 0+ball.width/2;}
}
function gotoNextLevel() {
    //goto next frame and stop
    level++;
    if(level >= questions.length){
        nextFrame();
    }
    else{
        setupLevel();
    }
}

动作框架4

stop ();
outputScore.text = String(finalscore);

简而言之,我们在这里所做的就是将所有这些状态带入最初是个别帧的实际游戏,然后将它们合并为一个框架。然后,我们通过使用ActionScript顶部的阵列来存储问题和答案,使整个事物动态。我们将这些Textfield ID的ID添加到孔图像中,以便我们可以访问该文本并以新的级别进行更改。我们将球更改为"球",因为我们现在不需要跟踪多个球,我们只有一个不断重置的球。每次用户正确选择时,游戏都会重置状态并使用下一级别的问题和答案。这样做直到使用所有问题。

希望这会有所帮助!(我会发布图片,但它不会让我直到获得声誉= P)

相关内容

最新更新