2011-11-27 16 views
1

プログラミングレッスンの宿題があります。私の仕事は、バルーンシューティングゲームを作成することです。私は自分のやり方ですべてをした、風船は産卵、カウンターワーク。しかし、私は彼らが上向きに移動することはできません、私は= y + +を移動する方法を知っています。それは私の問題です、私はどこでどのように把握できません。以下のコード:アクションスクリプト3オブジェクトをx、yで移動

import flash.events.MouseEvent; 
import flash.events.Event; 
var c = 0; 
circle.addEventListener(MouseEvent.MOUSE_DOWN, handlerMouseDown); 
circle.addEventListener(MouseEvent.MOUSE_UP, handlerMouseUp); 
function handlerMouseDown(event:MouseEvent):void{ 
    circle.startDrag(); 
} 

function handlerMouseUp(event:MouseEvent):void{ 
    circle.stopDrag(); 
    var i:int; 
    for (i=numChildren-1;i>=0;i--) 
     if (getChildAt(i) is MyRectangle){ 
      if (circle.hitTestObject(getChildAt(i))){ 
       removeChildAt(i); 
       c++; 
       score.text =c; 
      } 
     } 
} 

var moveUp:Boolean = true; 
var b:Boolean = false; 
var t1 = 1000; 
var t2 = 1002; 
var myTimer:Timer = new Timer(t1); 
myTimer.addEventListener(TimerEvent.TIMER, runMany); 
myTimer.start(); 

function runMany(event:TimerEvent):void { 
    b = true; 
    t1+=50; 
} 

var myTimer2:Timer = new Timer(t2); 
myTimer2.addEventListener(TimerEvent.TIMER, runMany2); 
myTimer2.start(); 

function runMany2(event:TimerEvent):void { 
    b = false; 
    t2 -=50; 
} 

addEventListener(Event.ENTER_FRAME, handlerEnterFrame); 
function handlerEnterFrame(event:Event):void{ 
var rect:MyRectangle = new MyRectangle(); 

addChildAt(rect,0); 
if(b){ 
    rect.x = int(Math.random()*width); 
    rect.y = int(Math.random()*height) 
    } 
} 

circle.addEventListener(Event.ENTER_FRAME, handlerEnterFrame2); 
function handlerEnterFrame2(event:Event):void{ 
    Mouse.hide(); 
    circle.startDrag(true); 
} 
+0

バルーンがすべて入っている配列が必要です。そのため、それぞれのyプロパティの変更を適用して上向きに浮動しているように見えます。すべてのバルーンが同時に上方向に浮動できるように配列が必要です。 – Alex

+0

あなたのENTER_FRAMEハンドラが適切ではありません。最初にMyRectangleが画面に表示されます。 2度目はドラッグを開始します。これは通常フレームごとに行われません。最後のバルーンポップなどの条件に基づいてオブジェクトを生成し、マウスの左ボタンが押されたときにドラッグします。 EnterFrameハンドラは座標を更新するためのものです。 – alxx

+0

ええ、私もそれを見つけた、修正されました。私はアレックスが言ったように、私はそれをしました - 私はそれらを配置し、次にforeachの動きを入れます。 Thx – Raimonds

答えて

0

あなたの説明からわかる1つの問題は、座標が間違っていることです。画面の左上は(0,0)で、y++を使用すると、オブジェクトは上にではなく下に移動します。 y--はそれを上に移動します...ゆっくりですが。

2つ目は、何らかの更新サイクルを行う必要があることです。 Balloonクラスには、update()関数が必要です。これは、各バルーンのすべてのフレームと呼ばれます。バルーンの更新機能では、y--(またはその位置を変更する別のもの)を入力します。一度それに到達すれば、衝突検出も同様に行うことができます。すべてのバルーン(および時間とともに変化するすべてのもの)を配列に入れ、各フレームは配列内の各項目にupdate()を呼び出し、forループを呼び出します。ステージに何かを追加するたびに、フレームごとに更新されたオブジェクトの配列に追加する必要があります。

+1

バルーンクラス内のイベントリスナーとメソッドを持つバルーンクラスを使用していたのはどうでしたか? AS3はOOP言語であり、すべてを1つのクラスに入れるような習慣を奨励しません。 – apscience

+0

これは非常に良い点です。これを追加する編集。 –