2010-12-30 12 views
1

AS3を学習しています。シンボルを移動するにはどうしたらいいですか?AS3での移動

マイコード

var counter:int = new int(); 
counter = 0; 
var point:symbol1 = new symbol1(); 
addChild(point); 
point.x = 25 + 50; 
point.y = 25 + 50; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
function move_handler(e) { 
    if (e.keyCode == Keyboard.SPACE) { 

    while (counter < 200) 
    { 
    trace(counter); 
    point.x += 1; 
    counter += 1; 
    } 
} 
} 

しかし、私はスペースを押したときに、シンボルは速くすることです。どのようにポイントの速度を編集できますか?

答えて

2

あなたがENTER_FRAMEイベントを使用する必要があります。DISPLAYLISTのみのコードの実行後に更新され

stage.addEventListener(Event.ENTER_FRAME,stageEnterFrame); 

function stageEnterFrame(e:Event):void{ 
    displayObject.x+=1 
} 

、それは「速い」ので、なぜあなたのオブジェクトの動きです。 このlinkは、プロセスの理解に役立ちます。

-1

開始する場合は、多くの既存のtween enginesの1つを与えることを検討して、スムーズな結果を素早く得ることを検討してください。

1

ユーザーがスペースバーを押してからシンボルを1ピクセル右に200回移動するのを待っています。

しかし、OXMO456は、手動で "point.x + = 1;"と入力したのと同じように、右に移動する回数はすべて200回と言います200回。

あなたの意図は、それが、あなたはif文とwhile文を置き換えることができ、右に200回を移動させることです場合:

if(counter<200){ 
    trace(counter); 
    point.x+=1; 
    counter+=1; 
} 

あなたはその後、数を変更することで、それはで移動速度を変更することができます"point.x + ="の後に

スピードを変更するより良い方法は、変数を使用して数値の意味を明確にすることです。これにより、同じスピードで他の方向に移動するなど、他のものにもその番号を使用しやすくなります。ここで

は、完成したコードは、これらの変更とクリーンアップのビットと次のようになります:意味をなさない

var counter:int = 0; // setting this variable as you define it saves space 
var speed:Number = 1; // here's the speed variable (declared as a number so you can have fractions) 
var point:symbol1 = new symbol1(); 
addChild(point); 
point.x = 75; // 25+50 is 75, one less thing for flash to work out 
point.y = 75; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 

function move_handler(e) { 
    if (e.keyCode == Keyboard.SPACE) { 
    if (counter < 200) 
    { 
     trace(counter); 
     point.x += 1; 
     counter += 1; 
    } 
    } 
} 

していますか?

0

使用トゥイーン:

インポートライブラリ:

import fl.transitions.Tween; 
import fl.transitions.easing.*; 
import fl.transitions.TweenEvent; 

var myTween:Tween = new Tween(ball, "x", Strong.easeOut, ball.x, ball.x + 100, 5, true); 

このコードは、5Sの "X" 軸に100にあなたのオブジェクト( "ボール")を動かします。

0

あなたのwhileループは、あなたのwhile文を削除した場合、それはDOWN SPACE上

0

に動作します、それは速くなっているがAS3の世界へようこそ。

あなたの問題の説明は少し曖昧ですが、私はあなたが何をすべきかを知っていると思います。スペースを叩くたびに表示オブジェクト(シンボル1)を200ピクセル右にトゥイーンしたいですか?もしそうなら、ここにあなたがそれを行う方法です。

import flash.events.KeyboardEvent; 
import flash.events.Event; 

var destinationX:int = 0; // this contains the point's destination x 

var point:symbol1 = new symbol1(); // best practice is to name all your classes starting with upper case, like Symbol1, not symbol1 
addChild(point); 
point.x = 25 + 50; 
point.y = 25 + 50; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 

stage.addEventListener(Event.ENTER_FRAME, render);// run render function every frame 

function move_handler(e:KeyboardEvent):void{// another best practice, when injecting a variable into a function declare what type the variable is, in this case e is a KeyboardEvent. :void when not returning any values from the function, basically all functions you make in the beginning should look like this 

    if (e.keyCode == Keyboard.SPACE) { 

      destinationX += 200;// add 200 to destinationX 
    } 
} 

function render(e:Event):void{ // runs every frame, if you set your fps to 30, then this will run 30 times a second 

    if(destinationX > point.x){//Check if point's destination x is more than the points current x position 

     point.x += 1;// add 1 to points x. you can change this if you want it to go faster 
    } 
} 
0

はGreensockライブラリをチェックアウト - それはあなたのためのすべてのonEnterFrame複雑さを取り出し、いくつかの素晴らしい機能を備えています。http://www.greensock.com/

0

全ドキュメントおよび実施例は、この

var counter:int = new int(); 
var vel = 1; //<------- Move 1 pixel by frame 
counter = 0; 
var point:symbol1 = new symbol1(); 
addChild(point); 
point.x = 25 + 50; 
point.y = 25 + 50; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 

function move_handler(e) { 
    if (e.keyCode == Keyboard.SPACE) { 
     stage.addEventListener(Event.ENTER_FRAME,moveEnterFrame); 
     stage.removeEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
    } 
} 


function moveEnterFrame(e:Event):void{ 
    point.x += vel; 
    counter ++; 
    if(counter >= 200){ 
     stage.removeEventListener(Event.ENTER_FRAME,moveEnterFrame); 

     counter = 0; 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
    } 
} 
0

ENTER_FRAMEは、しばらくのと同じである必要があります。

stage.addEventListener(Event.ENTER_FRAME, nameFunction); //this event execute fps ones on default 24 frames for seconds 


var speed:int = 5; 

function nameFunction(ev:Event){ 

    simbol.x += speed; 

} 
0

私はフレームレート

import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 

stage.addEventListener(Event.ENTER_FRAME,stageEnterFrame); 
var fremCount:int; 
var upDown:int; 
function stageEnterFrame(e:Event):void{ 

if(fremCount<30 && upDown==0){ 
    box.x+=1 
    fremCount++ 
    } 

if(fremCount==30){ 
    upDown=1; 
    trace("For next : "+fremCount , upDown); 
    } 

if(upDown==1){ 
    box.x-=1 
    fremCount--; 
    } 

if(upDown==1 && fremCount==0){ 
    upDown=0; 
    } 

    } 

    stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown); 
    function myKeyDown(e:KeyboardEvent):void{ 
    if (e.keyCode == Keyboard.SPACE){ 
    trace("Success!"+stage.frameRate); 
    stage.frameRate += 5; 
    if (stage.frameRate>150){stage.frameRate=0;} 
} 
} 
1
を使う......何かを描画し、インスタンス名]ボックスに名前を付けます.....ので、これはうまくスピードアップとダウンスペースキーによる

これは次のようになります。 Point.x + = 0.2; point.x + = 1の代わりに;

1

このイベントタイプは、あなたが望むものである:

' stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler)' 
+1

これはどのように速度を制御しますか? –

+0

このイベントは、オブジェクトの速度が毎秒100ピクセルの場合、0.33秒ごとに\(フレームレートまで)呼び出されます。呼び出されるたびに100 * 0.33ピクセル移動する必要があります – phantomjia

0
import flash.events.Event; 

var point:MovieClip = new Symbol1(); 
addChild(point); 
point.x = 25 + 50; 
point.y = 25 + 50; 



stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
function move_handler(e) 
{ 
     if (e.keyCode == Keyboard.SPACE) 

     { 
     stage.addEventListener(Event.ENTER_FRAME, moveRight); 
     } 
} 

function moveRight(evt:Event):void 
{ 
    point.x+=1; 
} 

私は、これはあなたが必要な正確に何だと思います。あなたはkey_down関数を作成して呼び出します。この関数の中では、move関数自体を呼びたいと思っています。これは、私が最後に作成した関数です。たとえば200pxで停止するには、if文とremoveEventlistenerを使用することをお勧めします。

「var point:MovieClip = new Symbol1();」などの小さなコーディングを変更して、自分のシンボルに適したものにしてください。

0

なぜNumberとして(ないintとして)あなたのカウンタ変数を宣言しない

var counter:Number = new Number(); 

その後、

point.x += 0.1; 
counter += 0.1; 

としてあなたなステートメントを変更するこれはあなたのポイントのムービークリップが遅くなります。 0.1を任意の値に変更してモーションを変更することができます。

0

あなたのシンボルが速すぎるのは、while loopが1回のループでpoint.xの値を200回繰り返すためです。あなたのシンボルの位置を制限するには、代わりにwhileループのif statementを使用する必要があります。

var point:symbol1 = new symbol1(); 
point.x = 75; // 25 + 50; 
point.y = 75; // 25 + 50; 
addChild(point); 

const SPEED:Number = 0.7; 
const DX:int = 200; // distance to cover 
var counter:Number = 0; // counts the distance covered 

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 

function move_handler(e:KeyboardEvent):void 
{ 
    if (e.keyCode == Keyboard.SPACE && counter < DX) 
    { 
     point.x += SPEED; 
     counter += SPEED; 
     trace(counter); // stops at 200 
    } 
} 
0

は、入力フレームのメソッドを使用します。

また、ハードコードしないでください:P

関連する問題