Hallo,
ich bin neu in diesem Forum und hoffe, dass ihr mir bei meinem Problem weiter helfen könnt
Mit einem Kumpel zusammen will ich ein kleines Point & Click Andventure erstellen. Grafiken und so sind in arbeit, aber als erstes braucht man natürlich ein Grundgerüst des Spieles...
Daran sitz ich grad, und hab schon den ersten Fehler, den ich leider allein nicht lösen kann...
Damit man es sich besser vorstellen kann, ist die Projekt Datei im Anhang, den Quellcode poste ich auch
Zurück zum Fehler: Wenn ich im Spiel bin kann ich mit rechts Klick das Gegenstandsmenu aufrufe.Wenn ich im Gegnstandsmenu normal klicke, dann stürzt das Spiel manchmal ab.
Im Debug Modus komm ich auch nicht weiter, da steht aber immer:
Thread [AWT-EventQueue-0] (Suspended (exception NullPointerException)) EventDispatchThread.run() line: not available
Ich hofe jetzt natürlich, dass ihr mir weiter helfen könnt, und wenn es irgendwas, wegen unsauberem programmieren zu beanstanden gibt (wahrscheinlich genug...), könnt ihr das auch gerne schreiben
Danke schonmal im voraus,
Schöne Grüße
Code: (Ich denke mal der wichtigste, wenn was fehlt, einfach schreiben
)
ich bin neu in diesem Forum und hoffe, dass ihr mir bei meinem Problem weiter helfen könnt
Mit einem Kumpel zusammen will ich ein kleines Point & Click Andventure erstellen. Grafiken und so sind in arbeit, aber als erstes braucht man natürlich ein Grundgerüst des Spieles...
Daran sitz ich grad, und hab schon den ersten Fehler, den ich leider allein nicht lösen kann...
Damit man es sich besser vorstellen kann, ist die Projekt Datei im Anhang, den Quellcode poste ich auch
Zurück zum Fehler: Wenn ich im Spiel bin kann ich mit rechts Klick das Gegenstandsmenu aufrufe.Wenn ich im Gegnstandsmenu normal klicke, dann stürzt das Spiel manchmal ab.
Im Debug Modus komm ich auch nicht weiter, da steht aber immer:
Thread [AWT-EventQueue-0] (Suspended (exception NullPointerException)) EventDispatchThread.run() line: not available
Ich hofe jetzt natürlich, dass ihr mir weiter helfen könnt, und wenn es irgendwas, wegen unsauberem programmieren zu beanstanden gibt (wahrscheinlich genug...), könnt ihr das auch gerne schreiben
Danke schonmal im voraus,
Schöne Grüße
Code: (Ich denke mal der wichtigste, wenn was fehlt, einfach schreiben
Java:
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* @author MrXYF
* Main steuert alles
*
*/
public class Main implements Runnable{
final int WIDTH = 640;
final int HEIGHT = 400;
final int STARTX = 300;
final int STARTY = 375;
JFrame frame;
Canvas gameCanvas;
Menu menu;
GegenstandMenu gegenstandMenu;
BufferStrategy bufferStrategy;
private BufferedImage bg0IMG, bg1IMG, bg2IMG, bg3IMG, bg4IMG, playerIMG;
private int mouseX, mouseY, dX, dY, level, mode;
private boolean pressed1, pressed2, gegenstandMenubool;
private GegenstandListe gegenstaende;
private ItemKiste itemKiste;
public Main(){
frame = new JFrame("Adventure Test");
level = 2;
mode = 0;
mouseX = STARTX;
mouseY = STARTY;
dX = STARTX;
dY = STARTY;
pressed1 = false;
pressed2 = false;
gegenstandMenubool = false;
gegenstaende = new GegenstandListe();
gegenstaende.level(level);
itemKiste = new ItemKiste();
for(int i = 0; i < 20; i++){
itemKiste.addToList(new Item());
}
JPanel panel = (JPanel) frame.getContentPane();
panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
panel.setLayout(null);
gameCanvas = new Canvas();
gameCanvas.setBounds(0, 0, WIDTH, HEIGHT);
gameCanvas.setIgnoreRepaint(true);
menu = new Menu();
panel.add(gameCanvas);
MouseAdapter adapter = new MouseControl();
gameCanvas.addMouseListener(adapter);
gameCanvas.addMouseMotionListener(adapter);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
gameCanvas.createBufferStrategy(2);
bufferStrategy = gameCanvas.getBufferStrategy();
gameCanvas.requestFocus();
}
private class MouseControl extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1){
if(gegenstandMenubool ){
short s = gegenstandMenu.clickCheck(e.getX(), e.getY());
if(s == 0){
gegenstaende.getLastClicked().see();
} else if(s == 1){
gegenstaende.getLastClicked().speak();
} else if(s == 2){
gegenstaende.getLastClicked().touch();
}
gegenstandMenubool = false;
gegenstandMenu = null;
}else if(gegenstaende.clickCheckAll(e.getX(), e.getY())){
gegenstandMenubool = true;
}
if(mode == 2){
itemKiste.clickCheckAll(e.getX(), e.getY());
}
pressed1 = true;
} else if(e.getButton() == MouseEvent.BUTTON3){
pressed2 = true;
}
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("MAUS R: " + e);
pressed1 = false;
pressed2= false;
}
@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
if(gegenstandMenubool){
gegenstandMenu.mouseCheck(mouseX, mouseY);
}
if(mode == 2){
itemKiste.setMouse(mouseX, mouseY);
}
}
}
long desiredFPS = 60;
long desiredDeltaLoop = (1000*1000*1000)/desiredFPS;
boolean running = true;
private double x = STARTX;
private double y = STARTY;
public void run(){
long beginLoopTime;
long endLoopTime;
long currentUpdateTime = System.nanoTime();
long lastUpdateTime;
long deltaLoop;
try {
playerIMG = ImageIO.read(Main.class.getResourceAsStream("figur.png"));
bg0IMG = ImageIO.read(Main.class.getResourceAsStream("bg0.png"));
bg1IMG = ImageIO.read(Main.class.getResourceAsStream("bg1.png"));
bg2IMG = ImageIO.read(Main.class.getResourceAsStream("bg2.png"));
bg3IMG = ImageIO.read(Main.class.getResourceAsStream("bg3.png"));
bg4IMG = ImageIO.read(Main.class.getResourceAsStream("bg4.png"));
} catch (IOException e) { }
while(running){
beginLoopTime = System.nanoTime();
render();
lastUpdateTime = currentUpdateTime;
currentUpdateTime = System.nanoTime();
update((int) ((currentUpdateTime - lastUpdateTime)/(1000*1000)));
endLoopTime = System.nanoTime();
deltaLoop = endLoopTime - beginLoopTime;
if(deltaLoop > desiredDeltaLoop){
//Do nothing. We are already late.
}else{
try{
Thread.sleep((desiredDeltaLoop - deltaLoop)/(1000*1000));
}catch(InterruptedException e){
//Do nothing
}
}
}
}
private void render() {
Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();
g.clearRect(0, 0, WIDTH, HEIGHT);
render(g);
g.dispose();
bufferStrategy.show();
}
/**
* Modus 0 = Menu Es wird geschaut, ob der Spiel start Button geklickt wird
* Modus 1 = Spiel Es wird die Mausposition betrachtet und Klicks aktualisiert
* Modus 2 = Gegenstadn Menu
*/
protected void update(int deltaTime){
switch(mode){
case 0:{
if(mouseX >= 220 && mouseX <= 420 && mouseY >= 100 && mouseY <= 200){
if(pressed1){
mode = 1;
mouseX = STARTX;
mouseY = STARTY;
}
}
}break;
case 1:{
if(pressed1){
dX = mouseX;
dY = mouseY;
}
if(pressed2){
mode = 2;
pressed2 = false;
}
laufen();
} break;
case 2:{
if(pressed2){
mode = 1;
pressed2 = false;
}
} break;
default: break;
}
}
/**
* Modus 0 = Menu
* Modus 1 = Spiel
* Zuerst wird der Hintergrund gemalt, dann die Gegenstände, und dann der Spieler
* Wenn auf ein Gegenstand geklickt wurde, wird das Gegenstadn Menu gezeichnet
* Modus 2 = Gegenstadn Menu
*/
protected void render(Graphics2D g){
switch(mode){
case 0:{
menu.draw(g);
} break;
case 1:{
switch(level){
case 1:{
g.drawImage(bg1IMG, 0, 0, null);
} break;
case 2:{
g.drawImage(bg2IMG, 0, 0, null);
} break;
case 3:{
g.drawImage(bg3IMG, 0, 0, null);
} break;
case 4:{
g.drawImage(bg4IMG, 0, 0, null);
} break;
default: g.drawImage(bg0IMG, 0, 0, null); break;
}
gegenstaende.draw(g);
g.drawImage(playerIMG, (int)x - 30, (int)y - 120, null);
if(gegenstandMenubool){
int xM = mouseX;
int yM = mouseY;
if(xM <= 0){
xM = 1;
}
if(yM <= 0){
yM = 1;
}
if(xM >= gameCanvas.getWidth()-150){
xM = gameCanvas.getWidth()-150;
}
if(yM >= gameCanvas.getHeight()-100){
yM = gameCanvas.getHeight()-100;
}
if(gegenstandMenu == null)
gegenstandMenu = new GegenstandMenu(xM, yM);
gegenstandMenu.draw(g);
}
}break;
case 2:{
g.drawImage(bg1IMG, 0, 0, null);
itemKiste.draw(g);
}break;
default: break;
}
}
public void laufen(){
if(x > dX){
x--;
} else if(x < dX) {
x++;
}
if(y > dY && y >= 350){
y--;
} else if(y < dY){
y++;
}
if(x >= frame.getWidth()-25){
level ++;
x = 30;
mouseX = 30;
dX = 30;
gegenstaende.level(level);
} else if(x <= 25){
level --;
x = frame.getWidth() -30;
mouseX = frame.getWidth() -30;
dX = frame.getWidth() -30;
gegenstaende.level(level);
}
}
public boolean mousePressed(){
return pressed1;
}
public static void main(String [] args){
Main ex = new Main();
new Thread(ex).start();
}
}
Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
/**
*
* Die Liste, die alle Items enthält und checkt
*
*/
public class ItemKiste {
private List<Item> itemListe;
private BufferedImage mainImg, buttonImg, selectImg;
private Item lastClicked;
private int mouseX, mouseY, indexLastClicked, buttonY, buttonX;
public ItemKiste(){
itemListe = new ArrayList<Item>();
mouseX = 0;
mouseY = 0;
indexLastClicked = -1;
try {
mainImg = ImageIO.read(Menu.class.getResourceAsStream("itemKiste.png"));
buttonImg = ImageIO.read(Menu.class.getResourceAsStream("benutzen.png"));
selectImg = ImageIO.read(Menu.class.getResourceAsStream("selectItem.png"));
} catch (IOException e) { }
buttonX = mainImg.getWidth() - 223;
buttonY = mainImg.getHeight() - 55;
}
public void addToList(Item i){
itemListe.add(i);
}
public void removeList(int i){
itemListe.remove(i);
}
public void setMouse(int mX, int mY){
mouseX = mX;
mouseY = mY;
}
/**
* Es wird geschaut, ob ein Item angeklickt wurde
*
*/
public void clickCheckAll(int mX, int mY){
for(int i = 0; i< itemListe.size(); i++){
Item g = (Item) itemListe.get(i);
if(g.clickCheck(mX, mY)){
lastClicked = g;
indexLastClicked = i;
}
}
if(mouseX > buttonX && mouseY > buttonY && mouseX < buttonX + buttonImg.getWidth() && mouseY < buttonY + 50){
System.out.println("BUTTON!!");
}
}
/**
* Es werden die Items und Button gemalt
*
*/
public void draw(Graphics g){
int x = 50;
int y = 50;
int yB = 50;
if(mouseX > buttonX && mouseY > buttonY && mouseX < buttonX + buttonImg.getWidth() && mouseY < buttonY + 50){
yB = 0;
}
g.drawImage(mainImg, 0, 0, null);
g.drawImage(buttonImg.getSubimage(0, yB, 173, 50), buttonX, buttonY, null);
for(int i = 0; i<itemListe.size(); i++){
if(i == indexLastClicked){
g.drawImage(selectImg, x, y, null);
}
itemListe.get(i).setPosition(x,y);
itemListe.get(i).draw(g);
if(x+150<= mainImg.getWidth()){
x += 60;
} else{
x = 50;
y += 60;
}
}
}
}
Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Item {
private BufferedImage mainImg;
private int x, y;
public Item(){
x = 0;
y = 0;
try {
mainImg = ImageIO.read(Menu.class.getResourceAsStream("Stein.png"));
} catch (IOException e) { }
}
public boolean clickCheck(int mX, int mY){
if(mX >= x && mX <= x + mainImg.getWidth() && mY >= y && mY <= y + mainImg.getHeight()){
return true;
} else {
return false;
}
}
public BufferedImage getImg(){
return mainImg;
}
public void draw(Graphics g){
g.drawImage(mainImg, x, y, null);
}
public void setPosition(int xP, int yP){
x = xP;
y = yP;
}
}
Anhänge
Zuletzt bearbeitet: