2016-09-02 2 views
-3

내가 시도하고있는 게임에서이 오류를 설명 할 수 없습니다. 저는 게임 프로그래밍을 처음 접했고 YouTube 튜토리얼을 따라 가고 있습니다. 내가 알 수있는 한, 비디오에서와 똑같이하고 있지만 여전히이 오류가 발생합니다.설명되지 않음 "추상이 아니며 추상적 인 방법을 무시하지 못함"오류

Error: Uncompilable source code - tilegame.entities.creatures.Player is not abstract and does not override abstract method die() in tilegame.entities.Entity at tilegame.entities.creatures.Creature.(Creature.java:11)

엔티티 클래스 :

package tilegame.entities; 

import java.awt.Graphics; 
import java.awt.Rectangle; 
import tilegame.Game; 
import tilegame.Handler; 

public abstract class Entity { 

    public static final int DEFAULT_HEALTH = 10; 
    protected Handler handler; 
    protected float x, y; 
    protected int width, height; 
    protected int health; 
    protected boolean active = true; 
    protected Rectangle bounds; 

    public Entity(Handler handler, float x, float y, int width, int height){ 
     this.handler = handler; 
     this.x = x; 
     this.y = y; 
     this.width = width; 
     this.height = height; 
     health = DEFAULT_HEALTH; 

     bounds = new Rectangle(0, 0, width, height); 
    } 

    public abstract void tick(); 

    public abstract void render(Graphics g); 

    public abstract void die(); 

    public void hurt(int amt){ 
     health += amt; 
     if(health <= 0){ 
      active = false; 
      die(); 
     } 
    } 

    public boolean checkEntityCollisions(float xOffset, float yOffset){ 
     for(Entity e : handler.getWorld().getEntityManager().getEntity()){ 
      if(e.equals(this)) 
       continue; 
      if(e.getCollisionBounds(0f, 0f).intersects(getCollisionBounds(xOffset, yOffset))) 
       return true; 
     } 
     return false; 
    } 

    public Rectangle getCollisionBounds(float xOffset, float yOffset){ 
     return new Rectangle ((int) (x + bounds.x + xOffset), (int) (y + bounds.y + yOffset), bounds.width, bounds.height); 
    } 


    public float getX() { 
     return x; 
    } 

    public void setX(float x) { 
     this.x = x; 
    } 

    public float getY() { 
     return y; 
    } 

    public void setY(float y) { 
     this.y = y; 
    } 

    public int getWidth() { 
     return width; 
    } 

    public void setWidth(int width) { 
     this.width = width; 
    } 

    public int getHeight() { 
     return height; 
    } 

    public void setHeight(int height) { 
     this.height = height; 
    } 

    public int getHealth() { 
     return health; 
    } 

    public void setHealth(int health) { 
     this.health = health; 
    } 

    public boolean isActive() { 
     return active; 
    } 

    public void setActive(boolean active) { 
     this.active = active; 
    } 
} 

플레이어 클래스 :

package tilegame.entities.creatures; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import tilegame.Game; 
import tilegame.Handler; 
import tilegame.gfx.Animation; 
import tilegame.gfx.Assets; 

public class Player extends Creature{ 

    //Animations 
    private Animation animDown, animUp, animLeft, animRight; 

    public Player(Handler handler, float x, float y){ 
     super(handler, x, y, Creature.DEFAULT_CREATURE_WIDTH, Creature.DEFAULT_CREATURE_HEIGHT); 

     bounds.x = 20; 
     bounds.y = 24; 
     bounds.width = 23; 
     bounds.height = 39; 

     //Animations 
     animDown = new Animation(250, Assets.player_down); 
     animUp = new Animation(250, Assets.player_up); 
     animLeft = new Animation(250, Assets.player_left); 
     animRight = new Animation(250, Assets.player_right); 
    } 

    @Override 
    public void tick() { 
     //Animations 
     animDown.tick(); 
     animUp.tick(); 
     animLeft.tick(); 
     animRight.tick(); 

     //Movement 
     getInput(); 
     move(); 
     handler.getGameCamera().centerOnEntity(this); 
    } 

    @Override 
    public void die() { 
     System.out.println("You died"); 
    } 

    private void getInput(){ 
     xMove = 0; 
     yMove = 0; 

     if(handler.getKeyManager().up) 
      yMove = -speed; 
     if(handler.getKeyManager().down) 
      yMove = speed; 
     if(handler.getKeyManager().left) 
      xMove = -speed; 
     if(handler.getKeyManager().right) 
      xMove = speed; 
    } 

    @Override 
    public void render(Graphics g) { 
     g.drawImage(getCurrentAnimationFrame(), (int) (x - handler.getGameCamera().getxOffset()), (int) (y - handler.getGameCamera().getyOffset()), width, height, null); 

     //Show bounding box 

     /*g.setColor(Color.red); 
     g.fillRect((int) (x + bounds.x - handler.getGameCamera().getxOffset()), 
       (int) (y + bounds.y - handler.getGameCamera().getyOffset()), 
       bounds.width, bounds.height);*/ 
    } 

    private BufferedImage getCurrentAnimationFrame(){ 
     if(xMove < 0){ 
      return animLeft.getCurrentFrame(); 
     }else if(xMove > 0){ 
      return animRight.getCurrentFrame(); 
     }else if(yMove < 0){ 
      return animUp.getCurrentFrame(); 
     }else 
      return animDown.getCurrentFrame(); 
    } 
} 

생물 등급 :

package tilegame.entities.creatures; 

import java.awt.Graphics; 
import tilegame.Game; 
import tilegame.Handler; 
import tilegame.entities.Entity; 
import tilegame.tiles.Tile; 

public abstract class Creature extends Entity{ 

    public static final float DEFAULT_SPEED = 3.0f; 
    public static final int DEFAULT_CREATURE_WIDTH = 64, 
          DEFAULT_CREATURE_HEIGHT = 64; 

    protected float speed; 
    protected float xMove, yMove; 

    public Creature(Handler handler, float x, float y, int width, int height) { 
     super(handler, x, y, width, height); 
     speed = DEFAULT_SPEED; 
     xMove = 0; 
     yMove = 0; 
    } 

    public void move(){ 
     if(!checkEntityCollisions(xMove, 0f)) 
      moveX(); 
     if(!checkEntityCollisions(0f, yMove)) 
      moveY(); 
    } 

    public void moveX(){ 
     if(xMove > 0){//Moving right 

      int tx = (int) (x + xMove + bounds.x + bounds.width)/Tile.TILEWIDTH; 

      if(!collisionWithTile(tx, (int) (y + bounds.y)/Tile.TILEHEIGHT) && !collisionWithTile(tx, (int) (y + bounds.y + bounds.height)/Tile.TILEHEIGHT)){ 
       x += xMove; 
      }else{ 
       x = tx * Tile.TILEWIDTH - bounds.x - bounds.width - 1; 
      } 

     }else if(xMove < 0){//Moving left 
      int tx = (int) (x + xMove + bounds.x)/Tile.TILEWIDTH; 

      if(!collisionWithTile(tx, (int) (y + bounds.y)/Tile.TILEHEIGHT) && 
        !collisionWithTile(tx, (int) (y + bounds.y + bounds.height)/Tile.TILEHEIGHT)){ 
       x += xMove; 
      }else{ 
       x = tx * Tile.TILEWIDTH + Tile.TILEWIDTH - bounds.x; 
      } 
     } 
    } 

    public void moveY(){ 
     if(yMove < 0){//Moving up 
      int ty = (int) (y + yMove + bounds.y)/Tile.TILEHEIGHT; 

      if(!collisionWithTile((int) (x + bounds.x)/Tile.TILEWIDTH, ty) && 
        !collisionWithTile((int) (x + bounds.x + bounds.width)/Tile.TILEWIDTH, ty)){ 
       y += yMove; 
      }else{ 
       y = ty * Tile.TILEHEIGHT + Tile.TILEHEIGHT - bounds.y; 
      } 

     }else if(yMove > 0){ //Moving down 
      int ty = (int) (y + yMove + bounds.y + bounds.height)/Tile.TILEHEIGHT; 

      if(!collisionWithTile((int) (x + bounds.x)/Tile.TILEWIDTH, ty) && 
        !collisionWithTile((int) (x + bounds.x + bounds.width)/Tile.TILEWIDTH, ty)){ 
       y += yMove; 
      }else{ 
       y = ty * Tile.TILEHEIGHT - bounds.y - bounds.height - 1; 
      } 
     } 
    } 

    protected boolean collisionWithTile(int x, int y){ 
     return handler.getWorld().getTile(x, y).isSolid(); 
    } 

    // GETTERS AND SETTERS 
    public int getHealth() { 
     return health; 
    } 

    public void setHealth(int health) { 
     this.health = health; 
    } 

    public float getSpeed() { 
     return speed; 
    } 

    public void setSpeed(float speed) { 
     this.speed = speed; 
    } 

    public float getxMove() { 
     return xMove; 
    } 

    public void setxMove(float xMove) { 
     this.xMove = xMove; 
    } 

    public float getyMove() { 
     return yMove; 
    } 

    public void setyMove(float yMove) { 
     this.yMove = yMove; 
    } 
} 

내가 (같은 추상적 인 방법 다이를 구현); 돌과 나무 수업에서도. 나는이 오류가 왜 발생하는지 이해할 수 없다. 누구든지 설명해 주겠니? NetBeans를 다시 시작하여 코드를 다시 작성하려고했습니다. 최소화

+4

프로그래밍으로 처음 시작하는 사람이라면 게임이 아닌 기본으로 시작하십시오. – SomeJavaGuy

+0

플레이어가 die() 메서드를 재정의해야합니다. – Kelvin

+0

@Kelvin이고 그렇지 않습니다. ?? – joc

답변

0

귀하의 코드 (check how to create a MVCE가) 정확하고 오류가 발생하지 않습니다

abstract class Entity { 
    public abstract void die(); 
} 

class Player extends Creature{ 

    @Override 
    public void die() { 
     System.out.println("You died"); 
    } 
} 

abstract class Creature extends Entity{ 
} 

그래서 당신의 수입을 확인을, 다른 패키지에 추가 Player 클래스가있을 수 있습니다.

관련 문제