2012-12-06 3 views
1

나는 플래시 게임으로 레이싱 게임을 만드는 방법을 알아 내려고하고있다.AS3 - 다음 카메라로 레이싱 게임

그러나 레벨을 고정시키고 차를 움직이는 대신에 - 플레이어의 차를 화면 중앙에 움직이지 않고 플레이어 주위로 회전시킬 수 있습니까?

감사합니다.

+0

heya, 당신이해야 할 노력하고 무엇을 heres 예를 들어, 내가 얼마 전에 AS2에서 그것을 만들었다, 완전한 소스 코드와 함께 제공 http://ffiles.com/flash/games/helicopter_game_with_camera_follow_3159.html는 희망 도와주세요 – joshua

+0

고마워요.하지만 정말로 까다로운 부분은 플레이어의 회전을 동일하게 유지하고 대신 레벨을 회전시키는 것입니다. – PROWNE

+0

그냥 자동차 대신에 bg 모션을 제외하고 똑같은 일을하십시오. – joshua

답변

2

다음은 원하는대로 할 수있는 실행 가능한 데모입니다. 자동차를 제어하기 위해 위, 왼쪽, 아래 및 오른쪽 키를 사용하십시오.

마지막으로 중요한 5 ~ 6 줄이 중요합니다.

package { 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 

public class Untitled2 extends Sprite{ 
    private var level:Sprite = new Sprite(); 
    private var car:Sprite = new Sprite(); 
    private var carVelocityX:Number = 0; 
    private var carVelocityY:Number = 0; 
    private var keyLeft:Boolean; 
    private var keyRight:Boolean; 
    private var keyUp:Boolean; 
    private var keyDown:Boolean; 

    public function Untitled2(){ 
     level.graphics.lineStyle(4, 0xFF0000); 
     level.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 

     car.graphics.beginFill(0x000000); 
     car.graphics.moveTo(-5, -5); 
     car.graphics.lineTo(5, -5); 
     car.graphics.lineTo(8, 0); 
     car.graphics.lineTo(5, 5); 
     car.graphics.lineTo(-5, 5); 

     addChild(level); 
     level.addChild(car); 
     car.x = 100; 
     car.y = 100; 

     addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true); 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown, false, 0, true); 
     stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp, false, 0, true); 
    } 

    private function onKeyUp(event:KeyboardEvent):void{ 
     if(event.keyCode == Keyboard.LEFT) 
      keyLeft = false; 
     else if(event.keyCode == Keyboard.RIGHT) 
      keyRight = false; 
     else if(event.keyCode == Keyboard.UP) 
      keyUp = false; 
     else if(event.keyCode == Keyboard.DOWN) 
      keyDown = false; 
    } 

    private function onKeyDown(event:KeyboardEvent):void{ 
     if(event.keyCode == Keyboard.LEFT) 
      keyLeft = true; 
     else if(event.keyCode == Keyboard.RIGHT) 
      keyRight = true; 
     else if(event.keyCode == Keyboard.UP) 
      keyUp = true; 
     else if(event.keyCode == Keyboard.DOWN) 
      keyDown = true; 
    } 

    private function onEnterFrame(event:Event):void{ 
     // Other stuff for controlling the car 
     carVelocityX *= 0.98; 
     carVelocityY *= 0.98; 
     car.x += carVelocityX; 
     car.y += carVelocityY; 

     if(keyLeft) car.rotation -= 7; 
     if(keyRight) car.rotation += 7; 

     var carRotationRadians:Number = car.rotation/180 * Math.PI; 

     if(keyUp){ 
      var speed:Number = Math.sqrt(carVelocityX * carVelocityX + carVelocityY * carVelocityY); 
      speed += 0.1; 
      carVelocityX = Math.cos(carRotationRadians) * speed; 
      carVelocityY = Math.sin(carRotationRadians) * speed; 
     } 

     if(keyDown){ 
      carVelocityX *= 0.8; 
      carVelocityY *= 0.8; 
     } 

     // Add 90 degrees because we want the car pointing up 
     carRotationRadians += Math.PI * 0.5 
     // Rotate the cars position to get its stage coordinates 
     var carX:Number = Math.cos(-carRotationRadians) * car.x - Math.sin(-carRotationRadians) * car.y; 
     var carY:Number = Math.sin(-carRotationRadians) * car.x + Math.cos(-carRotationRadians) * car.y; 
     // Position and rotate the level 
     level.rotation = -car.rotation - 90; // Add 90 degrees because we want the car pointing up 
     level.x = stage.stageWidth * 0.5 - carX; 
     level.y = stage.stageHeight * 0.5 - carY; 
    } 

}// End class Untitled2 

}// End package 
+0

와우! 고마워, 완벽 해. – PROWNE

2

예프.

당신이하고 싶은 일은 자동차를 다른 모든 클립과 다른 클립 (이동/회전을 원하는 모든 것)에두고 차를 변형 (이동/회전) 할 때마다 다른 모든 것에 대한 역.

저는 하향식이라고 상상하고 있습니다. 예를 들어 자동차가 일반적으로 움직이는 y 축 위로 모든 픽셀을 이동하면 이제는 다른 모든 것을 y 축 아래로 같은 양만큼 이동시킵니다.

마찬가지로, 일반적으로 차를 돌릴 때마다 같은 각도의 음수로 모든 것을 회전시킵니다.

걱정할 필요가있는 또 다른 사항은 화면의 가장자리를 사용하기 전에 이제는 영원히 갈 수 있기 때문에 세계의 가장자리를 만드는 것입니다.

관련 문제