0

500 ミリ秒ごとに (タイマー イベントを使用して) ボールをドロップする基本的なゲーム関数があり、マウスの後にドラッグするプレートにボールが当たったときにそれを取り除くと想定しています。問題は次のとおりです。この関数を使用しようとしましたが、deleteChild();機能を停止することなく、ボール オブジェクトの視覚的な外観を削除するだけであり、いくつかの問題が発生します。

  1. ボールは進み続け、床にぶつかるイベントをトリガーします。
  2. dropBall(); 落ちるボールをアニメーション化する関数は、実際には新しいボールをアニメーション化しません。

これは完全なスクリプトです:

//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

説明したように、コードが機能していません。これは次のように機能しています。

あなたはボールを1つしか持っておらず、それは毎秒gameTime1、次のことを行うdropBall()を呼び出すダニを参照して投げ上げられています。

  • それはあなたが持っている単一のボールを0の位置に置き換え、1.2秒以内にそれを下にアニメートします。var ballTween:Tween = new Tween(ball, "y", null, 0, 500, 1.2, true);
  • 次に、スコア++は、エンターフレームイベントハンドラー上にあるため、ボールの動きとは独立してトリガーされ、ボールがプレートに当たるフレームごとにスコアが増加します。
  • あなたは本当にあなたのコードをもう一度見て、アーキテクチャ、それがどのようにそしていつ機能するべきかを再考するべきです(基本的にあなたは知る必要があるだけでなく、ソフトウェアが何をすべきかを知る必要がありますが、これをソフトウェアに説明する必要があります。

アップデート:

movieclipt int oclassをエクスポートする方法については、チュートリアルに従ってください: http ://www.kirupa.com/developer/flashcs3/movieclips_classes_AS3_pg1.htm

次に、ロジックで:

関数(createBall)

  • ボールのインスタンスを作成します。(チュートリアルに従った場合は、その方法を知っています)
  • enterFrameイベントを開始し、ボールがパネルまたは地面に当たったかどうかを確認します。
  • 停止した後、何が打たれたかに応じて何をすべきかを決定します

次のようになります。

if ( hitPanel )
{
    increaseScrore ()
}
if ( hitFloor )
{
    decreaseLive () 
}
  • これらの各関数increase...decrease..、それらが実行された後、すべてがremoveBall関数である必要があります。increase..次に、soを呼び出すと、createBallすべてが繰り返され始めます。

PS不快感はありませんが、プログラミング言語を学ぶことができます。この場合、少し知っていると思いますが、ロジックが不足している場合は、フォーラムで見つけることができません...ロジック/アーキテクチャに関する基本情報を読んでください。アプリケーションなど...そして、インスタンスをどのように処理する必要があるかを見てください。

PSSは、wtfがOOPであることを知るために投資します。;)

幸運をお祈りしています!ハッピーホリデー:)

于 2011-12-25T13:40:57.353 に答える
0

ボールをに設定しようとしましたnullか?

于 2011-12-25T13:30:54.233 に答える