2014-12-23 2 views
1

Я разрабатываю StateBasedGame в Slick2D (только для учебных целей), и я столкнулся с проблемой.Spirte рисуется под фоном

walkingRight.draw(0,250); 

Эта анимация рисуется под фоновым спрайтом. Я понятия не имею, как это сделать. Я не вижу его вообще.

Полный код:

package gamelogic; 

import org.lwjgl.input.Mouse; 
import org.newdawn.slick.*; 
import org.newdawn.slick.gui.MouseOverArea; 
import org.newdawn.slick.state.*; 

public class Level extends BasicGameState { 

    // INITIATE IMAGES 
    public Image background; 
    public Image title; 
    public Image playButton; 
    public Image exitButton; 

    public Animation walkingRight; 
    public Animation playerIdle; 
    public int[] duration = {200, 200, 200, 200, 200}; 
    public int durationIdle[] = {200, 200}; 


    // INITIATE VARIABLES FOR TITLE'S POSITION 
    public float menuPosX; 
    public float menuPosY; 

    public Player player; 

    // __CONSTRUCTOR 
    public Level(int state) { 

    } 

    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException { 
     background = new Image("res/levelbg.png"); 
     Image[] walkRight = { new Image("res/player/snap0.png"), new Image("res/player/snap1.png"), 
       new Image("res/player/snap2.png"), new Image("res/player/snap3.png"), new Image("res/player/snap4.png")}; 
      Image idle[] = { new Image("res/player/snap0.png"), new Image("res/player/snap1.png")}; 

      this.walkingRight = new Animation(walkRight, this.duration, false); 
      this.playerIdle = new Animation(idle, this.durationIdle, false);   

    } 

    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException { 
     background.draw(0,0); 
     playerIdle.draw(0,0); 
    } 

    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException { 
     Input input = gc.getInput(); 

      walkingRight.draw(0,250); 

    } 

    public int getID() { 
      return 1; 
     } 
    } 

Не могли бы вы, ребята, пожалуйста, помогите мне с этим?

ответ

1

Хорошо, я нашел решение. Вместо того, чтобы рисовать анимацию внутри функции update(), вы должны нарисовать ее только в функции render() один раз с переменными в качестве координат. В функции update() вы затем измените координаты и просто назначьте другую анимацию переменной анимации.

+1

Это обусловлено порядком рендеринга. Обновление вызывается перед визуализацией, чтобы анимация была нарисована, когда рендер называется фоном, нарисованным поверх анимации, а простаивание игрока выполняется поверх фона. –

+0

Я понял это самостоятельно после нескольких часов испытаний и ошибок, но я благодарен за комментарий, он немного разъясняет мои мысли. Большое спасибо :). –

Смежные вопросы