質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
ActionScript 3

ActionScript 3 (AS3)はAdobe FrashとAIRプラットフォームによる、オープンソースかつオブジェクト指向のプログラミング言語です。AS3はRIA、モバイルアプリケーション、デスクトップアプリケーションなど広く使われます。

Q&A

解決済

2回答

1899閲覧

ActionScript3.0についての質問

elf_ggo

総合スコア13

ActionScript 3

ActionScript 3 (AS3)はAdobe FrashとAIRプラットフォームによる、オープンソースかつオブジェクト指向のプログラミング言語です。AS3はRIA、モバイルアプリケーション、デスクトップアプリケーションなど広く使われます。

0グッド

0クリップ

投稿2015/11/06 13:04

ActionScipt3.0で、オブジェクトを直線移動させています。
そのオブジェクトをクリックすると次フレームに移りたいのですが、エラー

「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at MethodInfo-14()」

が出てしまい、次に実行した時倍の速度でオブジェクトが移動してしまいます。

var dx : Number = -3; // x移動量

left.addEventListener(Event.ENTER_FRAME,function(event){ // ムービークリップを移動 left.x = left.x+dx; //left.y = left.y+dy; if (left.x < -1000) { left.x = 850;

}

})

直線移動していない時は正常に動くのでこの関数が原因だと思われます。
回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以下のようなサンプルを書いてみました。
ご質問に記載されているスクリプトをほぼコピペさせていただきましたが、3倍の速度で動いているようには感じられませんでした。

package

1{ 2 import flash.display.Sprite; 3 import flash.display.StageAlign; 4 import flash.display.StageScaleMode; 5 import flash.events.Event; 6 7 /** 8 * ... 9 * @author kenics 10 */ 11 [SWF(width="400",height="300",frameRate="24",backgroundColor="0x000000")] 12 public class goLeft extends Sprite 13 { 14 15 private var _canvas:Sprite = new Sprite(); 16 private var left:Sprite = new Sprite(); 17 18 private var dx:Number = -3; // x移動量 19 public function goLeft() 20 { 21 if (stage) init(); 22 else addEventListener(Event.ADDED_TO_STAGE, init); 23 } 24 private function init(e:Event = null):void 25 { 26 removeEventListener(Event.ADDED_TO_STAGE, init); 27 28 stage.scaleMode = StageScaleMode.NO_SCALE; 29 stage.align = StageAlign.TOP_LEFT; 30 31 addChild(_canvas); 32 33 _canvas.x = 0; 34 _canvas.y = 0; 35 _canvas.graphics.clear(); 36 37 createChild(_canvas, left, 0, 0, 15, 15, 0xffffff); 38 left.x = 400 - 15; 39 left.y = 300 / 2; 40 41 42 // パターン1 無名関数で実行 -- 始まり -- 43 left.addEventListener(Event.ENTER_FRAME,function(event:Event):void{ // パターン2 やパターン3 のときはコメントにする 44 // ムービークリップを移動 45 left.x = left.x+dx; 46 //left.y = left.y+dy; 47 if (left.x < -1000){ 48 left.x = 850; 49 } 50 }); 51 52 // パターン1 -- 終わり -- 53 54 // パターン2 とパターン 3 のときに利用するイベントリスナー 55 //left.addEventListener(Event.ENTER_FRAME, goingLeft); // パターン1のときはコメントにする 56 57 // パターン2 関数内の関数を実行 -- 始まり -- 58/* function goingLeft(event:Event):void{ 59 // ムービークリップを移動 60 left.x = left.x+dx; 61 //left.y = left.y+dy; 62 if (left.x < -1000){ 63 left.x = 850; 64 } 65 } 66*/ // パターン2 -- 終わり -- 67 } 68 69 // パターン3 関数を実行 -- 始まり -- 70/* private function goingLeft(event:Event):void{ 71 // ムービークリップを移動 72 left.x = left.x+dx; 73 //left.y = left.y+dy; 74 if (left.x < -1000){ 75 left.x = 850; 76 } 77 } 78*/ 79 // パターン3 -- 終わり -- 80 private function createChild(parent:Sprite,target:Sprite,x:int,y:int,w:int,h:int,color:int):void 81 { 82 83 target.graphics.beginFill(color); 84 target.graphics.drawRect(0, 0,w, h); 85 target.graphics.endFill(); 86 target.x = x; 87 target.y = y; 88 target.useHandCursor = true; 89 target.buttonMode = true; 90 parent.addChild(target); 91 } 92 } 93}

投稿2016/02/03 09:06

kenics

総合スコア179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

elf_ggo

2016/05/30 16:27

ありがとうございました、解決しました!
guest

0

ベストアンサー

@倍の速度でオブジェクトが移動する件
もし、leftのマウスイベントリスナー関数の中で
left.addEventListener(Event.ENTER_FRAME,function(event){
// ムービークリップを移動
left.x = left.x+dx;
//left.y = left.y+dy;
if (left.x < -1000) {
left.x = 850;
}
});
をネストしているのでしたら、
都度、removeEventListenerしてやらないといけません。
addEventListenerは重複します。つまり、イベント登録は上書きされません。
なので、「次に実行した時倍の速度でオブジェクトが移動」するのは解るような気がします。

@オブジェクト参照のプロパティまたはメソッドにアクセスすることはできません の件
「そのオブジェクトをクリックすると次フレームに移りたいのですが、」ここのくだりでちょっと気になったのですが…
left がメインタイムラインに静的配置されており、且つ移動させたいフレームがメインタイムラインであるとの理解が正しいなら、leftは全フレームにわたって配置されている必要があります。

解答になりましたでしょうか。

投稿2016/01/09 19:44

u_zy

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

elf_ggo

2016/05/30 16:26

ありがとうございます。解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問