2016-06-23 5 views
0

私はFlashを使用しており、私のアニメーションをソートのゲームにすることに決めました。だから私はコーディングを始めました。しかし、私が選択したキーを押して、それが私が望むことをしたが、キャラクターの元の場所にランダムにテレポートされたとき、小さな問題に遭遇しました。Actionscript 3.0ランダムテレポート

//FRAME 1 
stop(); 
//--Developer William Richmond 

import flash.events.KeyboardEvent; 
import flash.events.TimerEvent; 

stage.addEventListener(KeyboardEvent.KEY_UP,moveClipdown); 
stage.addEventListener(KeyboardEvent.KEY_DOWN,moveClipup); 
stage.addEventListener(KeyboardEvent.KEY_DOWN,moveClipright); 
stage.addEventListener(KeyboardEvent.KEY_DOWN,moveClipleft); 


//Attempting the border restriction code 
function limitStageBorder(object:MovieClip) { 
//1. 
var objectHalfWidth:uint=object.width/2; 
var objectHalfHeight:uint=object.height/2; 

//2. 
if (object.x+objectHalfWidth>stage.stageWidth) { 
    object.x=stage.stageWidth-objectHalfWidth; 
} 
else if (object.x - objectHalfWidth <0) {   
    object.x=0+objectHalfWidth;  
}  

//3.  
if (object.y-objectHalfHeight<0) {   
    object.y=0+objectHalfHeight;  
}  
else if (object.y + objectHalfHeight > stage.stageHeight) { 
    object.y=stage.stageHeight-objectHalfHeight; 
} 
} 
//down 
function moveClipdown(event:KeyboardEvent):void 
       { 
        if(event.keyCode == 83) 
        { 
         mcSquare1.y += 25 
        } 
       } 
//up 
function moveClipup(event:KeyboardEvent):void 
       { 
        if(event.keyCode == 32) 
        { 
         mcSquare1.y -= 10 
         mcSquare1.gotoAndPlay(20); 
        } 
       } 
      //right 
function moveClipright(event:KeyboardEvent):void{ 
        if(event.keyCode == 68){ 
         trace("I am running to the right"); 
         mcSquare1.scaleX = 0.75; 
         mcSquare1.x += 20 
         gotoAndStop(10); 
        } 
} 

      //Left 
function moveClipleft(event:KeyboardEvent):void{ 
        if(event.keyCode == 65) 
        { 
         trace("I am running to the left"); 
         mcSquare1.scaleX = -0.75; 
         mcSquare1.x -= 20 
         gotoAndStop(10); 
        } 
       } 

FRAME 10

stop(); 
//--Developer William Richmond 

import flash.events.KeyboardEvent; 
import flash.events.TimerEvent; 

stage.addEventListener(KeyboardEvent.KEY_UP,moveClipright10); 
stage.addEventListener(KeyboardEvent.KEY_UP,moveClipleft10); 

      //right 
function moveClipright10(event:KeyboardEvent):void{ 
        if(event.keyCode != 68){ 
         trace("I am standing"); 
         mcSquare1.scaleX = 0.75; 
         mcSquare1.x += 20 
         gotoAndStop(1); 
        } 
} 

      //Left 
function moveClipleft10(event:KeyboardEvent):void{ 
        if(event.keyCode != 65) 
        { 
         trace("I am standing"); 
         mcSquare1.scaleX = -0.75; 
         mcSquare1.x -= 20 
         gotoAndStop(1); 
        } 
       } 

誰が手伝いに行くを持っている可能性があれば、それは非常にいただければ幸いです!

+1

オブジェクトがいずれかのフレームでデザイン時にステージ上に存在する場合、オブジェクトは元の位置に再作成されます。おそらく、これが「テレポーテーション」の原因になるでしょう。アニメーションとコーディングは同じオブジェクトを共有するのが好きではありません。 – Vesper

答えて

0

フレーム内で直接コーディングすると、特にフレームを変更するときに、あらゆる種類の問題が発生する可能性があります。コードを見るだけでは何が間違っているとは言えません。基本クラスとコードをそこに使用することを強くお勧めします。または、タイムラインで実際にコードを作成する必要がある場合は、すべてを1つのフレームに配置します。