Hallo,
ich bin neu in java und hab mich jetzt was mit LWJGL befasst und versuche grad ein kleines spiel(2D) zu schreiben. bis jetzt hat auch alles geklappt. nur als ich neben dem Hintergrund noch weitere Texturen rendern wollte werden diese nicht angezeigt ( aber geladen werden sie, daran liegts nicht. ).
Hier ist mal der Code:
Gruß darman96
ich bin neu in java und hab mich jetzt was mit LWJGL befasst und versuche grad ein kleines spiel(2D) zu schreiben. bis jetzt hat auch alles geklappt. nur als ich neben dem Hintergrund noch weitere Texturen rendern wollte werden diese nicht angezeigt ( aber geladen werden sie, daran liegts nicht. ).
Hier ist mal der Code:
Java:
package spieleworkshop;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.*;
import com.sun.org.apache.bcel.internal.generic.Select;
public class Game {
private boolean running = true;
private TextureStore textureStore = new TextureStore();
private float fieldWidth;
private float backgroundWidth;
public String title;
public Game(String strTitle) {
title = strTitle;
}
public static void main(String[] args) throws LWJGLException {
Game game = new Game("Brettspiel");
game.run();
}
public void init(int width, int height) throws LWJGLException {
DisplayMode[] dm = Display.getAvailableDisplayModes();
for(DisplayMode mode : dm) {
if (mode.getWidth() == width && mode.getHeight() == height ) {
Display.setDisplayMode(mode);
} else {
Display.setDisplayMode(dm[0]);
}
}
Display.setTitle(title);
Display.create();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight(), 0, -1, 1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.4f);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glClearColor(0.1f, 0.5f, 1.0f, 1.0f);
LoadTextures();
}
public void run() {
try {
init(800,600);
} catch (LWJGLException e) {
e.printStackTrace();
}
while(running) {
if (Display.isCloseRequested()) {
running = false;
}
Display.update();
input();
update();
render();
}
cleanup();
}
public void input() {
}
public void update() {
}
public void render() {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
GL11.glLoadIdentity();
drawBackground(50, 100, "Background");
drawFields(17, 17);
}
private void LoadTextures() {
textureStore.LoadTexture("img/Fields/bg.png", "Background");
textureStore.LoadTexture("img/Fields/feld_blau.png", "fieldBlue");
textureStore.LoadTexture("img/Fields/playerZone.png", "playerZone");
}
private void drawBackground(float borderTop, float borderRight, String textureName) {
backgroundWidth = Display.getDisplayMode().getWidth() - (borderRight * 2);
float borderLeft = Display.getDisplayMode().getWidth() - borderRight;
float borderBottom = Display.getDisplayMode().getHeight() - borderTop;
textureStore.getTexture(textureName).bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(borderRight, borderTop, 0.0f);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex3f(borderLeft, borderTop, 0.0f);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex3f(borderLeft, borderBottom, 0.0f);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex3f(borderRight, borderBottom, 0.0f);
GL11.glEnd();
}
private void drawFields(int fieldsX, int fieldsY) {
fieldWidth = backgroundWidth / fieldsX;
for (int i = 1; i < fieldsY; i++) {
for(int j = 1; i < fieldsX; i++) {
switch (i) {
case 1:
if(j >=1 && j <=3 || j >= 15 && j <= 17) {
drawPlayerZone(fieldWidth, j, i);
} else {
drawFieldBlue(fieldWidth, j, i);
}
case 2:
if (j == 1 || j == 2 || j == 16 || j == 17) {
drawPlayerZone(fieldWidth, j, i);
} else {
drawFieldBlue(fieldWidth, j, i);
}
case 3:
if (j == 1 || j == 17) {
drawPlayerZone(fieldWidth, j, i);
} else {
drawFieldBlue(fieldWidth, j, i);
}
case 15:
if (j == 1 || j == 17) {
drawPlayerZone(fieldWidth, j, i);
} else {
drawFieldBlue(fieldWidth, j, i);
}
case 16:
if (j == 1 || j == 2 || j == 16 || j == 17) {
drawPlayerZone(fieldWidth, j, i);
} else {
drawFieldBlue(fieldWidth, j, i);
}
case 17:
if(j >=1 && j <=3 || j >= 15 && j <= 17) {
drawPlayerZone(fieldWidth, j, i);
} else {
drawFieldBlue(fieldWidth, j, i);
}
default:
drawFieldBlue(fieldWidth, j, i);
}
}
}
}
private void drawPlayerZone(float width, int offsetX, int offsetY) {
float startPosX = Display.getDisplayMode().getWidth() - backgroundWidth; // berechenet und speichert die start Position des Spielfeldes auf der X-achse
float startPosY = Display.getDisplayMode().getHeight() - backgroundWidth; // berechenet und speichert die start Position des Spielfeldes auf der Y-achse
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureStore.getTexture("playerZone").getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glEnd();
}
private void drawFieldBlue(float width, int offsetX, int offsetY) {
float startPosX = Display.getDisplayMode().getWidth() - backgroundWidth; // berechenet und speichert die start Position des Spielfeldes auf der X-achse
float startPosY = Display.getDisplayMode().getHeight() - backgroundWidth; // berechenet und speichert die start Position des Spielfeldes auf der Y-achse
textureStore.getTexture("fieldBlue").bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex3f(startPosX + (offsetX - 1) * fieldWidth, startPosY + (offsetY - 1) * fieldWidth, 1.0f);
GL11.glEnd();
}
public void cleanup() {
Display.destroy();
}
}
Gruß darman96
Zuletzt bearbeitet: