我正在嘗試爲一個簡單的FPS創建第一人稱運動控件。我想用閃光燈製作,但我正在爲定向運動而努力。在Actionscript 3中創建第一人稱控件
摘要:我希望能夠在Flash中創建FPS控件,但似乎無法做到。
詳情: 我使用的是由旋轉被應用於保持靜止與你的觀點之下的支點,讓世界看起來你在鼠標周圍旋轉的影片剪輯(mc
)的方法被移動。
然後,我將方向移動應用到嵌套在旋轉動畫片段(mc
)中的回形針(box
),以給出在第一人稱視圖中漫步的幻覺。
mc
- 把手旋轉(用於box
容器)
----- box
- 處理翻譯(box
作爲地板,所以我把它作爲一個黑方塊)
當您旋轉mc
並開始使用箭頭鍵移動時,問題就開始了。 box
的翻譯沒有考慮到mc
的旋轉,所以你仍然鎖定在box
的x軸和y軸上,所以無論你面對的是什麼,你總是鎖定在那些軸上,而不是無論您面對的是大多數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;
}
}