2012-11-29 2 views
-1

'나는 단순한 게임을 만들고 있으며, 그 중 일부는 당신을 공격 할 적을 원합니다. 먼저 이것을 움직이게해야합니다. 이 코드에서 "적"은 공입니다. 볼 위치로 "mob1"이라는 오브젝트를 사용하고 있으므로 나중에 여러 개의 볼을 가질 수 있습니다.공을 움직이는 것은 어떤 이유로 매우 까다 롭습니까?

내 게임 상태 -

package Worlds.World1; 

import org.lwjgl.input.Mouse; 
import org.newdawn.slick.Animation; 
import org.newdawn.slick.Color; 
import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.Graphics; 
import org.newdawn.slick.Image; 
import org.newdawn.slick.Input; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.state.BasicGameState; 
import org.newdawn.slick.state.StateBasedGame; 

import Main.SimpleMob; 

public class World1A extends BasicGameState{ 
    String mousePosition; 
    Image world; 
    Animation player, playerLeft, playerRight; 
    int[] duration = {200,200}; 
    float playerX; 
    float playerY; 
    float WorldX; 
    float WorldY; 
    float PlayerVisibleScreenX; 
    float PlayerVisibleScreenY; 
    String MovementDirection; 
    SimpleMob mob1 = new SimpleMob(); 
    public World1A(int state){ 
    } 

    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{ 
     Image [] WalkingLeft = {new Image("res/Sprites/buckysLeft.png"),new Image("res/Sprites/buckysLeft.png")}; 
     Image [] WalkingRight = {new Image("res/Sprites/buckysRight.png"),new Image("res/Sprites/buckysRight.png")}; 

     playerLeft = new Animation(WalkingLeft, duration, false); 
     playerRight = new Animation(WalkingRight, duration, false); 
     player = playerRight; 
     playerX = 0; 
     playerY = 0; 
     WorldX = 0; 
     WorldY = 0; 
     world= new Image("res/WorldImages/WorldBackGround.png"); 
     mousePosition="null"; 
     MovementDirection = "Not Moved Yet"; 
    } 

    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{ 
     world.draw(WorldX, WorldY); 
     g.setColor(Color.white); 
     g.fillOval(WorldX+mob1.getX(), WorldY+mob1.getY(), 50, 50); 
     g.fillRect(WorldX, WorldY+300, 500, 10); 
    } 

    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{ 
     mob1.autoEveryThing(delta, playerX, playerY); 
     int posX = Mouse.getX(); 
     int posY = Mouse.getY(); 
     mousePosition = "X: " + posX + "\nY: " + posY; 

     Input input = gc.getInput(); 
     if(input.isKeyDown(Input.KEY_LEFT)){ 
      WorldX += delta * 0.1f; 
      MovementDirection = "Left"; 
      player = playerLeft; 
     }else if(input.isKeyDown(Input.KEY_RIGHT)){ 
      WorldX -= delta * 0.1f; 
      MovementDirection = "Right"; 
      player = playerRight; 
     }else{ 
      MovementDirection = "Not Moving"; 
     } 
    } 


    //DO NOT CHANGE 
    public int getID(){ 
     return 2; 
    } 

} 

(, BTW 임은 아무것도 변경 그냥 넣다 Slick-를 사용하여) 그리고 내 폭도

package Main; 

import org.newdawn.slick.Graphics; 

public class SimpleMob { 

    //This class shall be used as an object creator. This will randomly move a graphic around, near to a player 
    private float MobX; 
    private float MobY; 
    private int AmountMoved = 0; 
    private boolean MoveRight = true; 
    private boolean MoveLeft; 
    private boolean PlayerNear = false; 
    public boolean PlayerDetected = false; 

    //Used to find the mobs X 
    public float getX(){ 
     return MobX; 
    } 

    //Used to find the mobs Y 
    public float getY(){ 
     return MobY; 
    } 

    //Used to set the mobs X 
    public void setX(float X){ 
     MobX = X; 
    } 

    //Used to set the mobs Y 
    public void setY(float Y){ 
     MobY = Y; 
    } 

    //Used to simply move the mob on its X co-ords 
    public void moveX(int delta){ 
     MobX += delta*0.1f; 
    } 

    //Used to simply move the mob on its Y co-ords 
    public void moveY(int delta){ 
     MobY += delta*0.1f; 
    } 

    public void autoEveryThing(int delta, float playerX, float playerY) { 

     System.out.println(AmountMoved); 
     // If the player has not been spotted the NPC/Mob will move left and 
     // right by 100 Pixels. 
     if (MoveRight == true) { 
      AmountMoved++; 
      MobX += delta * 0.1f; 
      if (AmountMoved == 100) { 
       MoveRight = false; 
       MoveLeft = true; 
       AmountMoved = 0; 
      } 
     } 
     if (MoveLeft == true) { 
      MobX -= delta * 0.1f; 
      AmountMoved++; 
      if (AmountMoved == 100) { 
       MoveRight = true; 
       MoveLeft = false; 
       AmountMoved = 0; 
      } 
     } 
    } 

} 

이에 어떤 도움이 될 것를 클래스 - 좋은, 또는 (mobs을 만드는 더 정확한/쉬운 방법 theres 경우)

감사합니다

+0

질문의 범위를 특정 문제로 제한하는 구체적인 프로그래밍 질문을하십시오. –

+0

정확하게 "특정"이라고 생각하는 사람이 정확히 무엇입니까? –

+0

나는 코드의 벽과 당신이하고 싶은 것에 대한 간단한 설명을 보았습니다 –

답변

0

System.out.println(...)autoEveryThing(...) 전화가 문제 일 수 있습니다. 이 작업은 1 초에 여러 번 이루어지며 콘솔로 출력하는 것은 가장 집중적 인 작업 중 하나입니다.

+0

아니요, 그렇지 않습니다. 나중에 추가 한 System.out.println()은 AmountMoved 정수와 관련이 없는지 확인하기 위해 아무런 차이가 없도록 확인했습니다. –

+0

음, 지터 된 움직임을 제거하기 위해 system.out.println을 제거했지만 여전히 꽤 많이 얻는다. –

+0

나는 아직도 지그재그가 의미하는 바를 혼동하고있다. 시간과의 관계 나 매끄러운 움직임이 아닌 다른 방식으로 움직이는 것을 의미 하는가? –

관련 문제