간단한 FPS에 대한 1 인칭 동작 컨트롤을 만들려고합니다. 나는 플래시로 만들고 싶다. 그러나 나는 방향적인 움직임으로 고심하고있다.액션 스크립트에서 1 인칭 컨트롤 만들기 3
요약 : 플래시에서 FPS 컨트롤을 만들 수 있지만 제대로 만들 수없는 것 같습니다.
세부 사항 : 나는 회전 세상이 보이는 경우 마우스 주위를 회전 할 수 있도록, 당신의 관점 아래의 피벗 포인트 고정 남아 무비 클립 (mc
)에 적용하는 방법을 사용하고 있습니다 움직입니다.
그런 다음 회전하는 무비 클립 (mc
) 내에 중첩 된 moveclip (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;
}
}