Je fais un jeu RTS en utilisant Slick 2D. J'ai une classe de construction et il contient un int appelé ressources. Je veux que la variable ressources devienne une chaîne et soit rendue au centre de mon bâtiment (qui est supposé être un rectangle).Java - Slick 2D - Placer du texte (ou n'importe quel graphique) sur un rectangle (ou n'importe quelle forme)
Voilà ma classe de construction:
package test;
import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.geom.Rectangle;
public class BaseBuilding extends Rectangle{
private int resources;
private Graphics g;
public BaseBuilding(float x, float y, float width, float height) {
super(x, y, width, height);
resources = 0;
g = new Graphics();
} // end constructor
public void render(){
g.drawString("bro wat", resources, resources);
g.setColor(Color.gray);
g.fill(this);
g.drawString(Integer.toString(resources), this.width/2, this.height/2);
} // end update
public int getResources(){
return resources;
} // end getResources
public void addResources(int mulla){
resources += mulla;
if (resources < 0)
resources = 0;
} // end addResources
public void createBasicUnit(){
// create a BasicUnit object in a randomly, valid position close to this object
// TODO
} // end createBasicUnit
} // end class def
Jusqu'à présent, tous mes états travaillent et je me suis le rectangle apparaisse de façon appropriée. Mon g.drawString (str, flotteur, flotteur) code avec des paramètres corrects fonctionnera sur ma classe GameState (non représenté) dans sa fonction de rendu, mais il me donne cette erreur dans ma classe BaseBuilding:
java.lang.NullPointerException
at org.newdawn.slick.Graphics.drawString(Graphics.java:1366)
at test.BaseBuilding.render(BaseBuilding.java:19)
at test.GameState.render(GameState.java:34)
at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:199)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:688)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
at test.StateBaseGame.main(StateBaseGame.java:22)
Sat Apr 18 03:18:55 EDT 2015 ERROR:Game.render() failure - check the game code.
org.newdawn.slick.SlickException: Game.render() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:691)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
at test.StateBaseGame.main(StateBaseGame.java:22)
donc i creusé autour et a découvert c'est cette ligne qui me cause des problèmes:
g.drawString(Integer.toString(resources), this.width/2, this.height/2);
Impossible de trouver sur Internet; aide si vous pouvez s'il vous plaît merci.
Joliment dit; woks comme un charme! Je suppose que je peux faire la même chose si je voulais dire pour créer une forme ou une image? – Ibrahim
Eh bien, Rectangle & Image sont deux choses différentes dans Sick.geom. Rectangle est une structure abstraite, il ne contient rien sauf quelques méthodes mathématiques et des variables de base. L'image a une logique openGL et peut se dessiner dans la méthode render de votre jeu (myImage.draw (0,0)). Mais il peut aussi être dessiné par ** g ** (g.drawImage (myImage)). Mais attention, vous devez faire chaque tirage dans la méthode render (boucle principale) de votre classe de jeu. – RSez