2011-12-25 16 views
0

私は、(タイマーイベントで)500ミリ秒ごとにボールを落とし、マウスの後ろにドラッグするプレートに当たったときにそれを取り除くと仮定する基本的なゲーム機能を持っています。事はです。私はdeleteChild();機能を使用しようとしましたが、それが唯一の問題のカップルが発生し、その機能を停止させることなく、ボールオブジェクト」の外観を削除します。アクションスクリプト3.0で衝突イベント後にオブジェクトを完全に削除

  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(); 

答えて

2

あなたの説明したコードは機能しません。あなたが唯一の1個のボールを持っている

、およびgameTime1ティックは、次のことdropBall()、呼び出しには参照のうえ、毎秒最大thorwn beeingてされています:このように取り組んでいる

  • は、それが単一の置き換えをあなたはボールを0個持っていて、ボールを1.2秒下にアニメーションします。それがenterFrameイベントハンドラであり、各フレームボールがプレートに当たっているスコアは、あなたが本当にもう一度コードになります
  • 増加し、rethingので、その後スコアは++ボールの動きからindependantlyトリガーされ
  • var ballTween:Tween = new Tween(ball, "y", null, 0, 500, 1.2, true);アーキテクチャ、どのように何をして、それが動作するはずです(basicalyあなたがソフトウェアが何をすべきか、知っておく必要がありますが、あなたがソフトウェアにこれを説明する必要はないだけ

UPDATE:

方法についてmovieclipt int ocをエクスポートするあなたのロジックに続いて http://www.kirupa.com/developer/flashcs3/movieclips_classes_AS3_pg1.htm

:小娘はチュートリアルに従う

機能(createBall)

  • ボールのインスタンスを作成します。 (もしあなたがチュートリアルに従えばあなたは知っている)
  • enterFrameイベントを停止した場合、ボールがパネルを叩いたかどうかを調べるenterFrameを開始します。
  • 停止deside後何

hittedたものに応じて行うようにすると、次のようになります。彼らはすべてのものをやった後、それらの機能increase...decrease..のそれぞれにおける

if (hitPanel) 
{ 
    increaseScrore() 
} 
if (hitFloor) 
{ 
    decreaseLive() 
} 
  • removeBall関数であるべきincrease..では、createBallへの呼び出しがすべて繰り返され始めます。

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

P.S. wtfがOOPであることを知るためにいくつかを投資してください。 ;)

最高の願い!ハッピーホリデー:)

+0

どのように私は毎回新しいボールを作るように変更することはできますか?そして、それがそのように機能すると言うと、どうすればそれを取り除くことができるのですか? –

+0

更新をご確認ください。 –

+0

今、私はドロップボール機能がオフになるたびに新しいボールオブジェクトをインスタンス化するようにコードを変更しましたが、今は衝突チェック機能がエラーを起こすので、まだ衝突をチェックする方法がありません。ライブラリオブジェクト 'ball1'からインスタンス化されたオブジェクトがプレートに当たるかどうかを確認することは可能ですか? –

0

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

関連する問題