Hallo,
Ich programmiere gerade ein kleines Spiel und bin auf eine kleine Hürde gestoßen...
Unzwar möchte ich an bestimmten stellen des Frames ein farbiges Rechteck zeichnen lassen,
Wenn ich allerdings jetzt
einfüge und auch
import java.awt.Graphics;
importiere gibt es beim ausführen folgende Fehlermeldung
ich kann damit nichts anfangen und dementsprechend das Problem nicht lösen.
Meine 2. Frage ist; ich möchte aus einer Bilddatei die Farbe für das zeichnen nehmen, da ich dort einen schönen Farbverlauf habe den ich benutzen will.
Wie kann ich das bewerkstelliegen?
Hier mein Quellcode:
Danke für eure Bemühungen
Das sind die Bilder
1. Wie mein Programm zur Zeit aussieht.
(Rechtecke sollen links und rechts neben das "Monster")
2. Farbverlauf
Ich programmiere gerade ein kleines Spiel und bin auf eine kleine Hürde gestoßen...
Unzwar möchte ich an bestimmten stellen des Frames ein farbiges Rechteck zeichnen lassen,
Wenn ich allerdings jetzt
Java:
Graphics g = null;
g.setColor(Color.RED);
g.fillRect((int)(2.5*(xSize/100)), (10*(ySize/100)), (20*(xSize/100)), (80*(ySize/100))+30);
g.setColor(Color.BLACK);
g.drawRect((int)(2.5*(xSize/100)), (10*(ySize/100)), (20*(xSize/100)), (80*(ySize/100))+30);
import java.awt.Graphics;
importiere gibt es beim ausführen folgende Fehlermeldung
Code:
java.lang.NullPointerException
at Idle.<init>(Idle.java:314)
at Idle$1.run(Idle.java:69)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ich kann damit nichts anfangen und dementsprechend das Problem nicht lösen.
Meine 2. Frage ist; ich möchte aus einer Bilddatei die Farbe für das zeichnen nehmen, da ich dort einen schönen Farbverlauf habe den ich benutzen will.
Wie kann ich das bewerkstelliegen?
Hier mein Quellcode:
Java:
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.SwingConstants;
import java.awt.event.MouseMotionAdapter;
import java.awt.Font;
public class Idle extends JFrame {
double Diamanten = 0;
long Diamanten_fake = 0;
int Diamanten_fake_plus = 1;
int Diamanten_fake_plus_PerSek = 0;
double Diamanten_PerTouch_Upgrade_1_price = 5;
int Diamanten_PerTouch_Upgrade_1_price_int = (int) Diamanten_PerTouch_Upgrade_1_price;
double Diamanten_PerSek_Upgrade_1_price = 100;
int Diamanten_PerSek_Upgrade_1_price_int = (int) Diamanten_PerSek_Upgrade_1_price;
String BILDER_PFAD = "source/images/";
ImageIcon Diamant_Bild_1 = new ImageIcon(BILDER_PFAD+"Diamant.png");
ImageIcon Hintergrund = new ImageIcon(BILDER_PFAD+"Weiß.png");
ImageIcon Exit = new ImageIcon(BILDER_PFAD+"Exit.png");
ImageIcon KH1 = new ImageIcon(BILDER_PFAD+"Battle hintergrund.png");
ImageIcon Monster1 = new ImageIcon(BILDER_PFAD+"Monster 1.png");
int Dia_rand_X_1 = (int) (50*Math.random()+25);
int Dia_rand_Y_1 = (int) (80*Math.random()+10);
int Dia_rand_X_2 = (int) (50*Math.random()+25);
int Dia_rand_Y_2 = (int) (80*Math.random()+10);
int Dia_rand_X_3 = (int) (50*Math.random()+25);
int Dia_rand_Y_3 = (int) (80*Math.random()+10);
int Diamant_price = 20;
int Dias_zahl = 1;
Timer timer;
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Idle frame = new Idle();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Idle() {
setAlwaysOnTop(true);
setTitle("Game");
setResizable(false);
Toolkit tk = Toolkit.getDefaultToolkit();
int xSize = ((int) tk.getScreenSize().getWidth());
int ySize = ((int) tk.getScreenSize().getHeight()) -40;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(0, 0, xSize, ySize);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
getContentPane().setBackground(Color.BLACK);
//setUndecorated(true); // Leisten weg?
JLabel Diamant_Anzeige_1 = new JLabel("Deafault Text");
Diamant_Anzeige_1.setForeground(Color.WHITE);
Diamant_Anzeige_1.setBounds((85*(xSize/100)), (5*(ySize/100)), (15*(xSize/100)), 14);
contentPane.add(Diamant_Anzeige_1);
Diamant_Anzeige_1.setText("Diamanten: "+Diamanten);
JLabel Diamant_1 = new JLabel(Diamant_Bild_1);
Diamant_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent arg0) {
System.out.println("Diamant_1 gefunden!");
Dia_rand_X_1 = (int) (50*Math.random()+25);
Dia_rand_Y_1 = (int) (80*Math.random()+10);
Diamanten_fake = Diamanten_fake + Diamanten_fake_plus;
Diamanten = (double) Diamanten_fake/10;
Diamant_Anzeige_1.setText("Diamanten: "+Diamanten);
Diamant_1.setBounds((Dia_rand_X_1*(xSize/100)), (Dia_rand_Y_1*(ySize/100)), 30, 30);
}
});
JLabel PerTouch_Anzeige = new JLabel("Diamanten per Touch: "+(double)Diamanten_fake_plus/10);
PerTouch_Anzeige.setForeground(Color.WHITE);
PerTouch_Anzeige.setBounds((85*(xSize/100)), (7*(ySize/100)), (15*(xSize/100)), 14);
contentPane.add(PerTouch_Anzeige);
Diamant_1.setBounds((Dia_rand_X_1*(xSize/100)), (Dia_rand_Y_1*(ySize/100)), 30, 30);
contentPane.add(Diamant_1);
JLabel Diamant_2 = new JLabel(Diamant_Bild_1);
Diamant_2.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Diamant_2 gefunden!");
Dia_rand_X_2 = (int) (50*Math.random()+25);
Dia_rand_Y_2 = (int) (80*Math.random()+10);
Diamanten_fake = Diamanten_fake + Diamanten_fake_plus + Diamanten_fake_plus;
Diamanten = (double) Diamanten_fake/10;
Diamant_Anzeige_1.setText("Diamanten: "+Diamanten);
Diamant_2.setBounds((Dia_rand_X_2*(xSize/100)), (Dia_rand_Y_2*(ySize/100)), 30, 30);
}
});
Diamant_2.setBounds((Dia_rand_X_2*(xSize/100)), (Dia_rand_Y_2*(ySize/100)), 30, 30);
contentPane.add(Diamant_2);
Diamant_2.setVisible(false);
JLabel Diamant_3 = new JLabel(Diamant_Bild_1);
Diamant_3.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Diamant_3 gefunden!");
Dia_rand_X_3 = (int) (50*Math.random()+25);
Dia_rand_Y_3 = (int) (80*Math.random()+10);
Diamanten_fake = Diamanten_fake + Diamanten_fake_plus + Diamanten_fake_plus + Diamanten_fake_plus;
Diamanten = (double) Diamanten_fake/10;
Diamant_Anzeige_1.setText("Diamanten: "+Diamanten);
Diamant_3.setBounds((Dia_rand_X_3*(xSize/100)), (Dia_rand_Y_3*(ySize/100)), 30, 30);
}
});
Diamant_3.setBounds((Dia_rand_X_3*(xSize/100)), (Dia_rand_Y_3*(ySize/100)), 30, 30);
contentPane.add(Diamant_3);
Diamant_3.setVisible(false);
JLabel Mehr_Arbeiter_Upgrade = new JLabel("Mehr Arbeiter! Kosten: "+Diamanten_PerTouch_Upgrade_1_price_int);
Mehr_Arbeiter_Upgrade.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println("Diamanten_PerTouch_Upgrade_1");
if(Diamanten >= Diamanten_PerTouch_Upgrade_1_price_int){
System.out.println("Diamanten_PerTouch_Upgrade_1 Success!");
Diamanten_fake_plus++;
Diamanten_fake = Diamanten_fake - Diamanten_PerTouch_Upgrade_1_price_int*10;
Diamanten = (double) Diamanten_fake/10;
Diamanten_PerTouch_Upgrade_1_price = Diamanten_PerTouch_Upgrade_1_price * 1.5;
Diamanten_PerTouch_Upgrade_1_price_int = (int) Diamanten_PerTouch_Upgrade_1_price;
Diamant_Anzeige_1.setText("Diamanten: "+Diamanten);
Mehr_Arbeiter_Upgrade.setText("Mehr Arbeiter! Kosten: "+Diamanten_PerTouch_Upgrade_1_price_int);
PerTouch_Anzeige.setText("Diamanten per Touch: "+(double)Diamanten_fake_plus/10);
}
}
});
Mehr_Arbeiter_Upgrade.setHorizontalAlignment(SwingConstants.LEFT);
Mehr_Arbeiter_Upgrade.setForeground(Color.WHITE);
Mehr_Arbeiter_Upgrade.setBackground(new Color(0,0,0,0));
Mehr_Arbeiter_Upgrade.setBorder(null);
JLabel Exit_Button = new JLabel(Exit);
Exit_Button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("");
System.out.println("");
System.out.println("--------------------------------------------------");
System.out.println("| Spiel Beendet mit Exit button. Keine Fehler! |");
System.out.println("--------------------------------------------------");
System.exit( 0 );
}
});
Exit_Button.setBounds(xSize-30, 0, 30, 30);
contentPane.add(Exit_Button);
Mehr_Arbeiter_Upgrade.setBounds((85*(xSize/100)), (20*(ySize/100)), (15*(xSize/100)), 23);
contentPane.add(Mehr_Arbeiter_Upgrade);
JLabel Mehr_Dias = new JLabel("Mehr Diamanten? Kosten: "+Diamant_price);
Mehr_Dias.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(Diamanten >= Diamant_price){
if (Dias_zahl == 2){
Diamant_3.setVisible(true);
Dias_zahl++;
Diamant_price = 100;
Mehr_Dias.setText("Mehr Diamanten? Kosten: "+Diamant_price);
System.out.println("Jetzt 3 Diamanten im Spiel");
Mehr_Dias.setVisible(false);
}
if (Dias_zahl == 1){
Diamant_2.setVisible(true);
Dias_zahl++;
Diamant_price = 50;
System.out.println("Jetzt 2 Diamanten im Spiel");
Mehr_Dias.setText("Mehr Diamanten? Kosten: "+Diamant_price);
}
}
}
});
Mehr_Dias.setForeground(Color.WHITE);
Mehr_Dias.setBounds((85*(xSize/100)), (22*(ySize/100)), (15*(xSize/100)), 23);
contentPane.add(Mehr_Dias);
JLabel Hintergrund_1 = new JLabel(Hintergrund);
Hintergrund_1.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Diamant_Anzeige_1.setText("Diamanten: "+Diamanten);
}
});
JLabel Auto_mine = new JLabel("Automatisch graben! Preis: "+Diamanten_PerSek_Upgrade_1_price_int);
Auto_mine.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (Diamanten_fake_plus_PerSek == 0){
int count = (int) (1);
TimeClass tc = new TimeClass(count);
timer = new Timer(1000, tc);
timer.start();
}
if (Diamanten >= Diamanten_PerSek_Upgrade_1_price_int){
Diamanten_fake_plus_PerSek++;
Diamanten_fake = Diamanten_fake - 10*Diamanten_PerSek_Upgrade_1_price_int;
Diamanten_PerSek_Upgrade_1_price = Diamanten_PerSek_Upgrade_1_price*1.1;
Diamanten_PerSek_Upgrade_1_price_int = (int) Diamanten_PerSek_Upgrade_1_price;
Auto_mine.setText("Automatisch graben! Preis: "+Diamanten_PerSek_Upgrade_1_price_int);
}
}
});
Auto_mine.setBounds((85*(xSize/100)), (24*(ySize/100)), (15*(xSize/100)), 23);
Auto_mine.setForeground(Color.WHITE);
contentPane.add(Auto_mine);
Hintergrund_1.setBounds((25*(xSize/100)), (10*(ySize/100)), (50*(xSize/100))+30, (80*(ySize/100))+30);
contentPane.add(Hintergrund_1);
JLabel Atak_button = new JLabel("Atakke! (Kostet 1 Diamant)");
Atak_button.setBackground(Color.RED);
Atak_button.setForeground(Color.BLACK);
Atak_button.setHorizontalAlignment(SwingConstants.CENTER);
Atak_button.setFont(new Font("Tahoma", Font.BOLD, 18));
Atak_button.setBounds((5*(xSize/100)), (95*(ySize/100)), 250, 15);
contentPane.add(Atak_button);
JLabel Hintergrung_Atakke_1 = new JLabel(Hintergrund);
Hintergrung_Atakke_1.setBounds((5*(xSize/100)), (int)(94.8*(ySize/100)), 250, 20);
contentPane.add(Hintergrung_Atakke_1);
JLabel Monster_1 = new JLabel(Monster1);
Monster_1.setBounds((5*(xSize/100)), (20*(ySize/100)), 250, 250);
contentPane.add(Monster_1);
JLabel kampf_Hintergrund_1 = new JLabel(KH1);
kampf_Hintergrund_1.setBounds((int)(2.5*(xSize/100)), (10*(ySize/100)), (20*(xSize/100)), (80*(ySize/100))+30);
contentPane.add(kampf_Hintergrund_1);
Graphics g = null;
g.setColor(Color.RED);
g.fillRect((int)(2.5*(xSize/100)), (10*(ySize/100)), (20*(xSize/100)), (80*(ySize/100))+30);
g.setColor(Color.BLACK);
g.drawRect((int)(2.5*(xSize/100)), (10*(ySize/100)), (20*(xSize/100)), (80*(ySize/100))+30);
}
public class TimeClass implements ActionListener{
public TimeClass(int counter){
}
public void actionPerformed(ActionEvent tc) {
System.out.println("Dia plus: "+(double)Diamanten_fake_plus_PerSek/10);
Diamanten_fake = Diamanten_fake + Diamanten_fake_plus_PerSek;
Diamanten = (double) Diamanten_fake/10;
}
}
}
Danke für eure Bemühungen
Das sind die Bilder
1. Wie mein Programm zur Zeit aussieht.
(Rechtecke sollen links und rechts neben das "Monster")
2. Farbverlauf