AS3プロジェクトとしてFlashDevelopで100%実行される新しいプロジェクトを開始しています。明確にするために、私はAdobeFlashでFLAを作成していません。AdobeFlashは使用されません。
AS3プロジェクトのドキュメントクラスでは、個別の.asクラスファイルに設定されているムービークリップを作成して参照する必要があります。ドキュメントクラスには、キーボードの押下を監視し、必要に応じてムービークリップを移動するイベントリスナーが含まれます。ムービークリップがセットアップされ、ドキュメントクラスからステージに追加されると、キーボード入力を介した移動が正常に機能します。ただし、ムービークリップを別のクラスから設定すると問題が発生します。
私が取り組んでいるプロジェクトとは別に、このStackOverflowの質問に対して3つのテストを実行するサンプルプロジェクトを作成しました。このサンプルプロジェクトには、Main.as(ドキュメントクラス)、createSquare.as(正方形のMCを作成)、およびcreateCircle.as(円のMCを作成)の3つのファイルがすべて同じフォルダーに格納されています。
テスト#1(青い長方形):Main.asで、charRectangleという新しいMCを作成します。サイズ、寸法、色などをここで定義し、ステージに追加します。関数keyIsDown()を実行すると、青い長方形がステージ上で正しく左または右に移動します。これは成功したテストです。
テスト#2(緑の四角):次に、別のクラスファイルからムービークリップを作成することをテストします。Main.asで、charSquareという新しい変数を作成し、それを新しいcreateSquare()として定義します。createSquare.asは特性を定義し、子をステージに追加します。問題:プロジェクトをテストすると、ステージに緑色の正方形が表示されません。ただし、トレース出力は、左矢印キーと右矢印キーが実際にcharSquareのX位置を更新していることを示しています。ムービークリップショーを作成するにはどうすればよいですか?それに対する私の解決策は...
テスト#3(黄色の円):黄色の円についても、緑色の正方形に対して行ったのと同じ方法ですべてを開始します。これをcharCircleと名付けます。Main.asで、変数を新しいcharCircle()として定義するときに、「this」という単語をcreateCircle.asの関数に渡します。これにより、関数createCircleに、ステージ上の親MCである「this」に子を追加するように指示します。これで、目に見える形を見ることができます。問題:トレース出力は、左矢印キーと右矢印キーがX位置を更新していることを示していますが、黄色の円は移動しません。このムービークリップを動かすにはどうすればよいですか?
主な目標:Main.asに文字の形のすべての属性を記載することを避け、それを他のクラスファイルに分離したままにします。Main.asでは、新しい変数を作成し、それを新しいcreateSquare()/ createCircle()として定義してから、Main.asのキーボード関数を使用して動きを処理します。後で、keyboardControls.asと呼ばれる4番目のテストクラスでキーボードコントロールを保持します。
これらの問題は、Adobe FlashのFLAから開始し、ドキュメントクラスを記述し、ステージ上でMCシンボルを作成し、インスタンス名を付けてから、FlashDevelopでASファイルを操作するときに解決できます。しかし、繰り返しになりますが、このプロジェクトではAdobe Flash / FLAを省略する必要があるため、これは私が探しているソリューションではありません。FlashDevelopAS3で100%動的に作成する必要があります。
ありとあらゆる支援に感謝します。3つのテストファイルのソースコードを以下に示します。
Main.as
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
public class Main extends MovieClip {
private var charRectangle:MovieClip;
private var charSquare:createSquare;
private var charCircle:createCircle;
public function Main() {
trace("Function: Main() has started.");
// Create rectangle character right here
charRectangle = new MovieClip();
charRectangle.graphics.beginFill(0x0000FF);
charRectangle.graphics.drawRect(200,20,250,100);
charRectangle.graphics.endFill();
stage.addChild(charRectangle);
// Create square character from class
charSquare = new createSquare();
// Create square character from class
charCircle = new createCircle(this);
// Event listener for user input
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyIsDown);
}
private function keyIsDown(e:KeyboardEvent):void {
// Left arrow key actions
if (e.keyCode == 37) {
charRectangle.x -= 5;
charSquare.x -= 5;
charCircle.x -= 5;
}
// Right arrow key actions
if (e.keyCode == 39) {
charRectangle.x += 5;
charSquare.x += 5;
charCircle.x += 5;
}
trace("charRectangle.x = " + charRectangle.x + ", charSquare.x = " + charSquare.x + ", charCircle.x = " + charCircle.x);
}
}
}
createSquare.as
package {
import flash.display.MovieClip;
public class createSquare extends MovieClip {
private var square:MovieClip;
public function createSquare() {
trace("Function: createSquare() has started.");
square = new MovieClip();
square.graphics.beginFill(0xFF0000);
square.graphics.drawRect(200,140,100,100);
square.graphics.endFill();
addChild(square);
}
}
}
createCircle.as
package {
import flash.display.MovieClip;
public class createCircle extends MovieClip {
private var circle:MovieClip;
public function createCircle(parentMC:MovieClip) {
trace("Function: createCircle() has started.");
circle = new MovieClip();
circle.graphics.beginFill(0x00FF00);
circle.graphics.drawCircle(200,350,75);
circle.graphics.endFill();
parentMC.addChild(circle);
}
}
}