簡體   English   中英

Java applet不會渲染圖像(png)

[英]Java applet wont render an image (png)

運行游戲時,我只會看到黑屏,沒有圖像。

我正在借助千篇一律的游戲開發指南來編寫我的游戲: http ://www.kilobolt.com/day-4-enter-the-robot.html

我真的很想知道我做錯了什么。

播放器

package HideAndSeek;

import java.awt.*;
import java.awt.image.ImageObserver;

public class Player
{
    private Image image;
    private double velocity;
    private int x;
    private int y;

    public Player(Image image,double velocity,int x,int y)
    {
        this.image = image;
        this.velocity = velocity;
        this.x = x;
        this.y = y;
    }

    public void update(Graphics g,ImageObserver io)
    {
        g.drawImage(image, 0, 0, io);
    }
}

Game.java

package HideAndSeek;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Game extends Applet implements Runnable,KeyListener
{
    private Image background;
    private Graphics graphics;
    private java.net.URL base;
    private Player player;

    @Override
    public void init() 
    {
        background = createImage(this.getWidth(), this.getHeight());
        graphics = background.getGraphics();
        setSize(800, 480);
        setBackground(Color.BLACK);
        setFocusable(true);
        java.awt.Frame frame = (java.awt.Frame) this.getParent().getParent();
        frame.setTitle("Hide and Seek");
        base = getCodeBase();
        addKeyListener(this);
    }

    @Override
    public void start() 
    {
        player = new Player(getImage(base, "data/character.png"),1.0,0,0);
        Thread thread = new Thread(this);
        thread.start();
    }

    @Override
    public void stop() 
    {

    }

    @Override
    public void destroy() 
    {

    }

    public void update()
    {
        if (background == null) 
        {
            background = createImage(this.getWidth(), this.getHeight());
            graphics = background.getGraphics();
        }

        graphics.setColor(getBackground());
        graphics.fillRect(0, 0, getSize().width, getSize().height);
        graphics.setColor(getForeground());
        paint();
        graphics.drawImage(background, 0, 0, this);
    }

    public void paint()
    {
        player.update(graphics,this);
    }

    @Override
    public void run() 
    {
        while(true)
        {
            update();
            repaint();
            try
            {
                Thread.sleep(17);
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void keyPressed(KeyEvent arg0)
    {
        switch (arg0.getKeyCode())
        {
           case KeyEvent.VK_UP:
               System.out.println("You pressed up arrow");
               break;

           case KeyEvent.VK_DOWN:
               System.out.println("You pressed down arrow");
               break;

           case KeyEvent.VK_LEFT:
               System.out.println("You pressed left arrow");
               break;

           case KeyEvent.VK_RIGHT:
               System.out.println("You pressed right arrow");
               break;

           case KeyEvent.VK_SPACE:
               System.out.println("You pressed the space key");
               break;
        }
    }

    @Override
    public void keyReleased(KeyEvent arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent arg0)
    {
        // TODO Auto-generated method stub

    }
}

你畫錯了畫。 每次調用paint用於在屏幕上繪制事物的Graphics對象都是不同的。 除了沒有正確覆蓋paint方法外,還缺少一個參數。 只需將方法更改為此,它應該可以工作:

public void paint(Graphics g)
{
player.update(g, this);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM