Gå til innhold

2 variabler i 1 if statement / g2d blinker på update.


Anbefalte innlegg

Hei, kronglete tittel men har et par spørsmål. Jobber med en oppgave å har støtt på noen problemer.

 

Bruker g2d.draw for å tegne bilder i spillet mitt, disse er importert inn i koden og tegnes på skjermen. Poenget er at en bil skal fange coins og "frode" for å så få poeng. Alt fungerer egentlig fint, bortsett fra da jeg la til "frode" på samme måte som coin tuller ting litt. Det som skjer er at om jeg plukker på "frode_r" så går coin helt vill.. spretter fram og tilbake.. som om dem reagerer på hverandre.. om jeg tar coin og ikke r_frode går alt helt fint. Noen måte å fikse dette på?

 

I tillegg "flasher" programmet når det tegnes på nytt, noen måte jeg kan unngå dette på?

 

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.util.Random;
import javax.swing.*;

public class BilFrame extends JFrame{
public int bil_yposisjon = 0;
public int bil_xposisjon = 0;

public int mynt_yposisjon = 0;
public int mynt_xposisjon = 0;
public int frode_ypos = 0;
public int frode_xpos = 0;
public int bredde = 1024;
public int hoyde = 720;
public int poengsum = 0;
public int minuspoeng = 0;
public int JoptionOK = 0;


public BilFrame(){
 setSize(bredde, hoyde);
	add(new Vindu(this));



	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	//setFocusable(true);

	setVisible(true);
}

public void kjoerHoyre(){
 //bil_xposisjon += 8;
}

public void kjoerVenstre(){
 //bil_xposisjon -= 8;
}

public void myntFall(){
 /*mynt_yposisjon += 5;
 if(mynt_yposisjon>hoyde){
  mynt_yposisjon = 0;
  Random rg = new Random();
  mynt_xposisjon = rg.nextInt(bredde);
 }*/
}

public void frodeFall () {

 frode_ypos += 5;
  if(frode_ypos>hoyde){
  frode_ypos = 0;
  Random rg = new Random();
  frode_xpos = rg.nextInt(bredde);}
  }

public void kollision(){
 /*poengsum += 1;
 mynt_yposisjon = 0;*/
 frode_ypos = 0;
}

private class Vindu  extends JPanel implements ActionListener {
/**
 * @param args
 */
ImageIcon bil;
ImageIcon mynt;
ImageIcon frode;
BilFrame parent;
Timer timer;

JLabel pointslabel;

public Vindu(BilFrame parent){
 this.parent = parent;
 this.setBackground(Color.BLACK);
	setFocusable(true);
	setBackground(Color.BLACK);
	setDoubleBuffered(true);
	setTitle("EliseSpillet - Fang sjokoladen før den stikker av!");
 this.setVisible(true);
 //bil = new ImageIcon("src/car_oppgave.jpg");
 bil = new ImageIcon(this.getClass().getResource("bunny.png"));
 //mynt = new ImageIcon("src/coin.jpg");
 mynt = new ImageIcon(this.getClass().getResource("catch.png"));
 frode = new ImageIcon(this.getClass().getResource("frode.png"));

 this.parent.bil_xposisjon = 0;
 this.parent.bil_yposisjon = 300 ;
 //System.out.println(this.yposisjon);
 setDoubleBuffered(true);
 addKeyListener(new TAdapter());
 timer = new Timer(5,this);
 timer.start();

	pointslabel = new JLabel();

	this.add(pointslabel);

}

public void paint(Graphics g) {
 if (minuspoeng > 10) {
  UIManager.put("OptionPane.okButtonText", "Prøv igjen bitch!");
  JOptionPane.showMessageDialog(null, "Du døde av dårlig samvittighet over sløst sjokolade!" );
  if (JoptionOK == JOptionPane.OK_OPTION){
if (JoptionOK == 0) {
minuspoeng = 0;
poengsum = 0;

}
  }

 }
 else {

 super.paint(g);
	Graphics2D g2d = (Graphics2D)g;
	try{
	 g2d.drawImage(mynt.getImage(), this.parent.mynt_xposisjon, this.parent.mynt_yposisjon, this);
	 g2d.drawImage(frode.getImage(), this.parent.frode_xpos, this.parent.frode_ypos, this);

	 g2d.drawImage(bil.getImage(), this.parent.bil_xposisjon, this.parent.bil_yposisjon, this);
	 Toolkit.getDefaultToolkit().sync();
	 g.dispose();
	pointslabel.setText("Dine poeng er: "+parent.poengsum + " Du har : " + parent.minuspoeng + " minuspoeng!");
	}
	catch(NullPointerException e){
	 System.out.println("Kunne ikke tegne opp");
	}

 }
}

public void tegnPaaNytt(){
 repaint();
 paint(getGraphics());
 try {
  Thread.sleep(10);
 } catch (InterruptedException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 }
 checkCollision();
}

public void checkCollision(){
 Rectangle mynt_r = new Rectangle(this.parent.mynt_xposisjon, this.parent.mynt_yposisjon, mynt.getImage().getWidth(this), mynt.getImage().getHeight(this));
 Rectangle frode_r = new Rectangle(this.parent.frode_xpos, this.parent.frode_ypos, frode.getImage().getWidth(this), frode.getImage().getHeight(this));
 Rectangle bil_r = new Rectangle(this.parent.bil_xposisjon, this.parent.bil_yposisjon, bil.getImage().getWidth(this), bil.getImage().getHeight(this));
 if(mynt_r.intersects(bil_r) || frode_r.intersects(bil_r)){
  parent.kollision();
  System.out.println("Kollisjon");
 }

}

public void actionPerformed(ActionEvent arg0) {
 parent.myntFall();
 parent.frodeFall();
 tegnPaaNytt();

}

private class TAdapter extends KeyAdapter{
 public void keyPressed(KeyEvent e){
	 int key = e.getKeyCode();
	 if (key == KeyEvent.VK_RIGHT) {
	  parent.kjoerHoyre();
	 }
	 if (key == KeyEvent.VK_LEFT) {
	  parent.kjoerVenstre();
	 }
	 tegnPaaNytt();

 }
}
}
}

Lenke til kommentar
Videoannonse
Annonse

Vet ikke hva du mener med å plukke på frode, antar du kanskje mener når du skrur på kollisjon så blir mynt_ypos og frode_ypos satt til 0 når noe kolliderer?

 

For å se hva som skjer feil i tegninga, så kan du se på Exceptionen (NullpointerException e) du får.

 

Den gir som regel litt informasjon om hva som gikk galt.

 

Lykke til med Dat101 på UiA ;)

Endret av Cemi
  • Liker 1
Lenke til kommentar

Har ikke jobbet spesifikt med g2d før, men jeg antar at årsaken til flashingen på skjermen er at du tømmer skjermen før du kaller getGraphics() og så tegner den. Hvis du endrer

 repaint();
 paint(getGraphics());

til noe slikt som

Graphics grafikkTilTegning = getGraphics();
 repaint();
 paint(grafikkTilTegning);

Burde den hjelpe.

 

Årsaken er at bildet ditt står tomt mens du genererer grafikk, og det kan ta litt tid.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...