我是新手,所以我确信有一个简单的解决方案可以解决这个问题,但我无法解决这个问题以挽救我的生命。
我试图创建一个将球滚入洞中的游戏,然后你的分数会增加,然后你会进入下一个级别。无论我做什么,当第一个球进入第一洞时,游戏会自行窒息并停止运行,即使我(想)我告诉它前进到下一帧。
我的代码在这里 -
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.dropboxusercontent.com/u/3610599/whirlyball.fla
任何人都可以帮我吗?就像我说的那样,我是新手,我确定我犯了很多错误,但我一直试图解决这个问题一个星期而且还没有能够。
我提前真诚地感激。
答案 0 :(得分:0)
我想我明白你要做什么。最好的解决方案可能是进行一些重构,使其更具动态性,从而解决每个游戏级别的跳帧问题。
首先,我将分享我在早期学习并在每个Flash项目开始时所做的事情 - 创建一个动作层,锁定它(你永远不会想要将对象意外地放入其中),将所有动作脚本放在这一层上。 (如果你绝对需要,只将脚本放在其他图层上)
要使下面的代码有效,您需要执行以下操作:
行动框架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顶部的数组来存储问题和答案,从而使整个事物变得动态。我们将这些文本字段ID添加到孔图像中,以便我们可以访问该文本并在新级别上更改它。我们将球改成'球',因为我们现在不需要跟踪多个球,我们只有一个我们一直在重置的球。每次用户选择正确时,游戏都会重置状态并使用下一级别的问题和答案。这种情况一直持续到使用所有问题为止。
希望这有帮助! (我会发布图片但它不会让我直到我得到一些声誉= P)