Problem med getDrawGraphics() med Canvas (Java)

Permalänk
Medlem

Problem med getDrawGraphics() med Canvas (Java)

Hej!
Varje gång jag kör igenom denna koden så returnerar "g2d = buffer.getDrawGraphics();" null.
Kan ej förstå varför. Tror jag får fram rätt BufferStrategy, (det är ej null). Men får jag inte ut något graphihcs objekt ur den. Var tror ni kan vara fel?,

Här är koden

Citat:

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;

public class PeachCanvas extends Canvas {
Graphics g2d=null;
BufferStrategy buffer=null;
boolean button=false;
int FWidth = 800;
int FHeight = 600;

public PeachCanvas(){
this.setIgnoreRepaint(true);
this.setBounds(0, 0, FWidth, FHeight);
this.setBackground(Color.green);

this.setVisible(true);

this.setVisible(true);

}

public void run() {

this.createBufferStrategy(1);

this.buffer = this.getBufferStrategy();

g2d = buffer.getDrawGraphics();
g2d.setColor(Color.green);

}

public void paint(){
g2d = buffer.getDrawGraphics();
g2d.setColor(Color.green);
}

}

Vore bra om någon kunde säga vad som är fel, försöker få ett bättre grepp om Graphics klassen.

Tack på förhand!
mvh Magnus

Visa signatur

Jag har en grm dator

Permalänk
Medlem

Jag löste problemet, måste skriva över addNotify() metoden från canvas i min egen klass PeachCanvas. Där i måste jag därefter anropa super klassens metod. Blev så här:

import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferStrategy; public class PeachCanvas extends Canvas implements Runnable { Graphics g2d=null; BufferStrategy buffer=null; boolean button=false; int FWidth = 800; int FHeight = 600; Thread t; public PeachCanvas(){ this.setIgnoreRepaint(true); this.setBounds(0, 0, FWidth, FHeight); } public void addNotify() { super.addNotify(); this.createBufferStrategy(2); this.buffer = this.getBufferStrategy(); requestFocus(); StartGame(); } private void StartGame() { if (t == null) { t = new Thread(this); t.start(); } } public void run() { while(true){ try { t.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } paint(); Draw(); }} public void paint(){ g2d = buffer.getDrawGraphics(); g2d.setColor(Color.GREEN); g2d.fillRect(0, 0, 1000, 1000); g2d.setColor(Color.BLUE); g2d.setColor(Color.BLACK); g2d.fillRect(10, 10, 100, 100); } public void Draw() { if (!buffer.contentsLost()) { buffer.show(); if (g2d != null) { g2d.dispose(); } } } }

Visa signatur

Jag har en grm dator