2013-06-14 5 views
2

Простой вопрос, возможно, не так простое решение. Мой код должен показывать треугольник на черном фоне, который можно перемещать по экрану. Отображается только ничего, только белая область, на которую нельзя щелкнуть правой кнопкой мыши. Он не работает ни в appletviewer, ни в документе HTML и не показывает синтаксических ошибок. Что не так с моим кодом?Applet ничего не отображает

import java.awt.*; 
import java.applet.*; 
import java.awt.geom.*; 
import java.awt.image.BufferedImage; 
import java.awt.event.*; 


public class Shipmovementtest extends Applet implements Runnable,KeyListener{ 

    Graphics2D g2d; 
    Ship ship1 = new Ship(); 
    BufferedImage backbuffer; 
    AffineTransform identity = new AffineTransform(); 
    Shape ship1shape; 
    Thread gameloop; 
    public void start() 
    { 
     gameloop = new Thread(this); 
     gameloop.start(); 
    } 
    public void run() 
    { 
     Thread t = Thread.currentThread(); 
     while(gameloop==t) 
     { 
     try 
     { 
      Thread.sleep(20); 
     } 
     catch(InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 
     repaint(); 
     } 
    } 
    public void stop() 
    { 
     gameloop = null; 
    } 

    public void init() 
    { 
     ship1shape = ship1.getShape(); 
     backbuffer = new BufferedImage(640,480,BufferedImage.TYPE_INT_RGB); 
     g2d = backbuffer.createGraphics(); 
     addKeyListener(this); 
     setFocusable(true); 
     requestFocusInWindow(); 

    } 
    public void update(Graphics g) 
    { 
     g2d.setTransform(identity); 
     g2d.setPaint(Color.BLACK); 
     g2d.fillRect(0,0,getSize().width,getSize().height); 
     drawShip(); 
     paint(g); 
    } 
    public void keyTyped(KeyEvent e){} 
    public void keyPressed(KeyEvent e) 
    { 
     int ke = e.getKeyCode(); 
     switch(ke) 
     { 
     case KeyEvent.VK_LEFT: 
      ship1.setFaceAngle(ship1.getFaceAngle()-5); 
      break; 
     case KeyEvent.VK_RIGHT: 
      ship1.setFaceAngle(ship1.getFaceAngle()+5); 
      break; 
     case KeyEvent.VK_UP: 
      ship1.incX(-ship1.calcAngleMoveX(ship1.getFaceAngle())*ship1.velocity); 
      ship1.incY(-ship1.calcAngleMoveY(ship1.getFaceAngle())*ship1.velocity); 
      break; 
     case KeyEvent.VK_DOWN: 
      ship1.incX(ship1.calcAngleMoveX(ship1.getFaceAngle())*ship1.velocity); 
      ship1.incY(ship1.calcAngleMoveY(ship1.getFaceAngle())*ship1.velocity); 
      break; 
     } 
    } 
    public void paint(Graphics g) 
    { 
     g2d.drawImage(backbuffer,0,0,this); 
    } 
    public void keyReleased(KeyEvent e){} 
    public void drawShip() 
    { 
     g2d.setTransform(identity); 
     g2d.translate(ship1.getX(),ship1.getY()); 
     g2d.rotate(Math.toRadians(ship1.getFaceAngle())); 
     g2d.setColor(ship1.getColor()); 
     g2d.fill(ship1.getShape()); 
    } 
} 
+1

Где 'Ship'? Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

5

В конце paint вам нужно на самом деле рисовать буфер реальных график g. В настоящее время вы только рисуете в буфере.

Так правильный код будет

public void paint(Graphics g) 
{ 
    g.drawImage(backbuffer,0,0,this); 
} 
+0

Это прекрасно работает, спасибо: ~) – imulsion