0

我有一个基本的游戏功能,每 500 毫秒丢一个球(带有一个计时器事件),并且假设当它碰到一个在鼠标后拖动的盘子时会摆脱它。事情是; 我尝试使用该deleteChild();功能,但它只会删除球对象的视觉外观而不会停止其功能,这会导致几个问题:

  1. 球继续前进,并触发撞击地板的事件。
  2. 落球();为落球设置动画的函数实际上并不为新球设置动画。

这是完整的脚本:

//imports:
import flash.events.Event;
import fl.transitions.Tween;
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.TimerEvent;

//the function 'startGame, handles all basic game functions.
function startGame() {

//inisializes the variable 'Score' and gives it a value of 0.
var Score = 0;


//enter_frame listener. calls 'movePlate'
stage.addEventListener(Event.ENTER_FRAME, movePlate);


//function 'movePlate'. makes the plate follow the mouse
function movePlate(event:Event):void {
    plate.x = mouseX;
}


//calls the dropBall function
dropBall()


//the function 'dropBall'. animates the droping ball
function dropBall() {
    var oldpost = 0;
    var randomNum:Number = Math.random() * 550;
    var xAxis:int = Math.round(randomNum);
    trace(randomNum);
    trace(xAxis);
    ball.x = xAxis;
    base.x = xAxis;
    var oldpost = xAxis;
    var ballTween:Tween = new Tween(ball, "y", null, 0, 500, 1.2, true); 
    oldpost = xAxis;
}

//function 'gameTime'. the timer function that controlls the intervals between falling eggs and ratio of good to bad eggs.
var gameTime1:Timer = new Timer(1000);
gameTime1.addEventListener(TimerEvent.TIMER, gameTimer1Function)

function gameTimer1Function(evt:TimerEvent):void {
    dropBall();
}

gameTime1.start();

//enter frame event listener. calls  'checkCollision'
addEventListener(Event.ENTER_FRAME,checkCollision);


//function checl collision. checks if the ball hits the plate
function checkCollision(event: Event):void {
    if(ball.hitTestObject(plate)) collisionDetected();
}


//function collision detected
function collisionDetected():void {
    Score ++;
    trace(Score);
    scoreText.text = Score;

}


//enter frame event listener. calls  'checkGameOver'.
addEventListener(Event.ENTER_FRAME,checkGameOver);
 //function 'checkGameOver.
function checkGameOver(event: Event):void {
    if(ball.hitTestObject(floor)) gameOver();
}


//function 'gameOver'.
function gameOver():void {
    trace('GAME OVER!!! Your Score Is: ' + Score + '.');
    trace('Asta la Vista Baby :D');

}
}
startGame();
4

2 回答 2

2

你的代码不像你解释的那样工作。它是这样工作的:

你只有一个球,它每秒钟都在被敲打,gameTime1参考滴答调用 dropBall(),它执行以下操作:

  • 它将您拥有的单个球替换到 0 位置,并在 1.2 秒内将其动画到底部。var ballTween:Tween = new Tween(ball, "y", null, 0, 500, 1.2, true);
  • 然后 score++ 独立于球的运动触发,因为它在 enterframe 事件处理程序上,并且球击中盘子的每一帧得分都会增加
  • 你真的应该再次查看你的代码,重新定义架构,它应该如何工作以及何时工作(基本上你不仅需要知道软件应该做什么,而且你需要向软件解释这一点。

更新:

有关如何将movieclipt in oclass 导出,请遵循教程: http ://www.kirupa.com/developer/flashcs3/movieclips_classes_AS3_pg1.htm

然后在你的逻辑中:

函数(创建球)

  • 创建一个球的实例。(如果你按照教程,那么你知道如何)
  • 启动 enterFrame 来检查球是否击中了面板或地面,如果它确实停止了 enterFrame 事件。
  • 停止后决定做什么取决于被击中的东西

应该是这样的:

if ( hitPanel )
{
    increaseScrore ()
}
if ( hitFloor )
{
    decreaseLive () 
}
  • 在这些函数中的每一个中,increase...并且decrease..在它们完成之后,一切都应该是removeBall函数,increase..然后调用 thecreateBall所以一切都开始重复。

PS 请不要冒犯,但你可以学习编程语言,在这种情况下,我看到你知道一点,但如果你缺少一些逻辑,你不会在论坛上找到它......阅读一些关于逻辑/架构的基本信息应用程序等......请看一下需要如何处理实例。

PSS 投资一些就知道 wtf 是 OOP。;)

最良好的祝愿!节日快乐 :)

于 2011-12-25T13:40:57.353 回答
0

您是否尝试将球设置为null?

于 2011-12-25T13:30:54.233 回答