0

Flash Professional CS5.5 を使用しています。加速度計を使用して動くボール (シンボル) があるアプリを作成する必要があります。ボールの座標 A がこの座標 B に到達すると、フレーム 2 (gotoAndPlay (2))。最初にボールの座標を見つけなければなりませんよね?どうやってこれを作るのですか?

ここに私が今持っているコードがあります

c_ball.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);
function fl_ClickToDrag(event:MouseEvent):void{
c_ball.startDrag();}
stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);
function fl_ReleaseToDrop(event:MouseEvent):void{
c_ball.stopDrag();}

座標を取得した後、それは機能しますか?

function f_level (e) if (c_ball.x==100 && c_ball.y==100) {
gotoAndStop(2);}
4

2 に答える 2

0

MOUSE_UPとMOUSE_DOWNは、加速度計データを探している場合に必要なものではありません。加速度計クラスと関連するイベントが必要です。

次のようなものを試してください。

import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

var accel:Accelerometer = new Accelerometer();


accel.addEventListener(AccelerometerEvent.UPDATE, handleAccelUpdate);

更新ハンドラー:

function handleAccelUpdate(e:AccelerometerEvent):void{
   //inside this function you now have access to acceleration x/y/z data
   trace("x: " + e.accelerationX);
   trace("y: " + e.accelerationY);
   trace("z: " + e.accelerationZ);
   //using this you can move your MC in the correct direction
   c_ball.x -= (e.accelerationX * 10); //using 10 as a speed multiplier, play around with this number for different rates of speed 
   c_ball.y += (e.accelerationY * 10); //same idea here but note the += instead of -=

   //you can now check the x/y of your c_ball mc
   if(c_ball.x == 100 && c_ball.y == 100){
         trace("you win!"); //fires when c_ball is at 100, 100
   }
} 

これで、MCを画面から「ロール」できるようになるので、おそらく何らかの境界チェックを追加する必要があります。

詳細については、このすばらしい記事をご覧ください。

http://www.republicofcode.com/tutorials/flash/as3accelerometer/

于 2012-04-24T17:42:18.283 に答える
0

簡単で節約できる方法は、ターゲット エリアに移動する 1 つの位置 (ユーザーにとっては難しいもの) をテストする代わりに、衝突検出を使用することです。

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;

public class Hittester extends Sprite
{

    var ball:Sprite = new Sprite();
    var testarea:Sprite = new Sprite();

    public function Hittester()
    {
        super();
        ball.graphics.beginFill(0xff0000);
        ball.graphics.drawCircle(0,0,10);

        testarea.graphics.beginFill(0x00ff00);
        testarea.graphics.drawRect(0,0,50,50);
        testarea.x = 100;
        testarea.y = 100;

        // if testarea should be invisble
        /*testarea.alpha = 0;
        testarea.mouseEnabled = false;
        */

        ball.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);

        addChild(testarea);
        addChild(ball);
    }
    private function startDragging( E:Event  = null):void{
        ball.startDrag();
        stage.addEventListener(MouseEvent.MOUSE_UP, stopDragging);
    }
    private function stopDragging( E:Event  = null):void{
        stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragging);       
        ball.stopDrag();

        test();
    }
    private function test():void{
        if( ! ball.hitTestObject(testarea) ){
            ball.x = 10;
            ball.y = 10;
        }
        else{
            // here goes next frame command ;)
        }
    }   
}
}
于 2012-04-24T17:58:43.657 に答える