シンプルなFPSのファーストパーソンムーブメントコントロールを作成しようとしています。私はフラッシュで作ってみたいですが、私は方向性の動きに苦しんでいます。Actionscript 3でファーストパーソンコントロールを作成する
要約: FPSコントロールをフラッシュで作成したいと思っていますが、それを正しく行うことはできません。
詳細: 私は回転がときにマウス世界は一見あなたの周りに回転するように、あなたの視点の下にそのピボットポイントで静止したままムービークリップ(mc
)に適用される方法を使用しています移動される。
次に、回転するムービークリップ(mc
)内にネストされたムービークリップ(box
)に方向性の動きを適用して、最初の人の視点でウォーキングするような錯覚を与えます。
mc
は、 - 回転(box
用容器)
----- box
ハンドル - 翻訳ハンドル(box
床として機能するので、私は黒い四角形としてそれを持っている)
mc
を回転して矢印キーで移動を開始すると、問題が発生します。 box
の翻訳ではmc
の回転を考慮していないので、x軸とy軸にはまだbox
に固定されていますので、どこに直面しても、常に軸に固定されていますほとんどのFPSゲームが採用しているところに直面しているところでは、
私はここからどこへ行くのか分からないので、どんな助けでも大歓迎です。
タイムラインコード:
//You’ll need a symbol named mc. With another symbol named box within it.
//mc should be centered on the stage.
//stage size 1920x1080
var mL: Boolean = false;
var mR: Boolean = false;
var mD: Boolean = false;
var mU: Boolean = false;
var speed: int = 10;
mc.rotationX=90;
mc.y=1000;
mc.x=932.1;
mc.z=0;
mc.width=980;
mc.height=98;
stage.addEventListener(Event.ENTER_FRAME, EF);
function EF(e: Event): void {
//Rotates mc based on distance of mouseX to the center of the stage.
if(mouseX<stage.stageWidth){
mc.rotationY += speed*((mouseX-stage.stageWidth/2)*.0001);
}
if(mouseX>stage.stageWidth){
mc.rotationY += speed*((mouseX-stage.stageWidth/2)*.0001);
}
//Arrow key controls.
if (mL == true) {
mc.box.x += speed;
}
if (mR == true) {
mc.box.x -= speed;
}
if (mD == true) {
mc.box.y += speed;
}
if (mU == true) {
mc.box.y -= speed;
}
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, kD);
function kD(e: KeyboardEvent): void {
//Key down conditionals.
if (e.keyCode == Keyboard.LEFT && mR == false && mD == false && mU == false) {
mL = true;
}
if (e.keyCode == Keyboard.LEFT && mR == false && mD == false && mU == true) {
mL = true;
mU = true;
}
if (e.keyCode == Keyboard.UP && mR == false && mD == false && mL == true) {
mL = true;
mU = true;
}
if (e.keyCode == Keyboard.LEFT && mR == false && mD == true && mU == false) {
mL = true;
mD = true;
}
if (e.keyCode == Keyboard.DOWN && mR == false && mU == false && mL == true) {
mL = true;
mD = true;
}
if (e.keyCode == Keyboard.RIGHT && mL == false && mD == false && mU == false) {
mR = true;
}
if (e.keyCode == Keyboard.RIGHT && mL == false && mD == false && mU == true) {
mR = true;
mU = true;
}
if (e.keyCode == Keyboard.UP && mL == false && mD == false && mR == true) {
mR = true;
mU = true;
}
if (e.keyCode == Keyboard.RIGHT && mL == false && mD == true && mU == false) {
mR = true;
mD = true;
}
if (e.keyCode == Keyboard.DOWN && mL == false && mU == false && mR == true) {
mR = true;
mD = true;
}
if (e.keyCode == Keyboard.UP && mR == false && mD == false && mL == false) {
mU = true;
}
if (e.keyCode == Keyboard.DOWN && mL == false && mR == false && mU == false) {
mD = true;
}
}
stage.addEventListener(KeyboardEvent.KEY_UP, kU);
function kU(e: KeyboardEvent): void {
//Key up conditionals.
if (e.keyCode == Keyboard.LEFT) {
mL = false;
}
if (e.keyCode == Keyboard.RIGHT) {
mR = false;
}
if (e.keyCode == Keyboard.UP) {
mU = false;
}
if (e.keyCode == Keyboard.DOWN) {
mD = false;
}
}