0

我在这里学习本教程

我下载了它的源代码并运行,但图像没有显示。

这是结果 在此处输入图像描述

我期待 在此处输入图像描述 结果与教程中的结果相同。

这是代码:StartingClass.java

package kiloboltgame;

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

public class StartingClass extends Applet implements Runnable, KeyListener {

    private Robot robot;
    private Image image, character;
    private Graphics second;
    private URL base;

    @Override
    public void init() {

        setSize(800, 480);
        setBackground(Color.BLACK);
        setFocusable(true);
        addKeyListener(this);
        Frame frame = (Frame) this.getParent().getParent();
        frame.setTitle("Q-Bot Alpha");
        try {
            base = getDocumentBase();

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
        }

        // Image Setups
        character = getImage(base, "data/character.png");
        System.out.println(" "+base);

    }

    @Override
    public void start() {
        robot = new Robot();

        Thread thread = new Thread(this);
        thread.start();
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

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

    @Override
    public void update(Graphics g) {
        if (image == null) {
            image = createImage(this.getWidth(), this.getHeight());
            second = image.getGraphics();
        }

        second.setColor(getBackground());
        second.fillRect(0, 0, getWidth(), getHeight());
        second.setColor(getForeground());
        paint(second);

        g.drawImage(image, 0, 0, this);

    }

    @Override
    public void paint(Graphics g) {
        g.drawImage(character, robot.getCenterX() - 61, robot.getCenterY() - 63, this);

    }

    @Override
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("Move up");
            break;

        case KeyEvent.VK_DOWN:
            System.out.println("Move down");
            break;

        case KeyEvent.VK_LEFT:
            robot.moveLeft();
            break;

        case KeyEvent.VK_RIGHT:
            robot.moveRight();
            break;

        case KeyEvent.VK_SPACE:
            System.out.println("Jump");
            robot.jump();
            break;

        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("Stop moving up");
            break;

        case KeyEvent.VK_DOWN:
            System.out.println("Stop moving down");
            break;

        case KeyEvent.VK_LEFT:
            robot.stop();
            break;

        case KeyEvent.VK_RIGHT:
            robot.stop();
            break;

        case KeyEvent.VK_SPACE:
            System.out.println("Stop jumping");
            break;
        }

    }

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

机器人.java

package kiloboltgame;

import java.awt.Graphics;

public class Robot {

    private int centerX = 100;
    private int centerY = 382;
    private boolean jumped = false;

    private int speedX = 0;
    private int speedY = 1;


    public void update() {

        // Moves Character or Scrolls Background accordingly.
        if (speedX < 0) {
            centerX += speedX;
        } else if (speedX == 0) {
            //System.out.println("Do not scroll the background.");

        } else {
            if (centerX <= 150) {
                centerX += speedX;
            } else {
                //System.out.println("Scroll Background Here");
            }
        }

        // Updates Y Position
        centerY += speedY;
        if (centerY + speedY >= 382) {
            centerY = 382;
        }

        // Handles Jumping
        if (jumped == true) {
            speedY += 1;

            if (centerY + speedY >= 382) {
                centerY = 382;
                speedY = 0;
                jumped = false;
            }

        }

        // Prevents going beyond X coordinate of 0
        if (centerX + speedX <= 60) {
            centerX = 61;
        }
    }

    public void moveRight() {
        speedX = 6;
    }

    public void moveLeft() {
        speedX = -6;
    }

    public void stop() {
        speedX = 0;
    }

    public void jump() {
        if (jumped == false) {
            speedY = -15;
            jumped = true;
        }

    }

    public int getCenterX() {
        return centerX;
    }

    public int getCenterY() {
        return centerY;
    }

    public boolean isJumped() {
        return jumped;
    }

    public int getSpeedX() {
        return speedX;
    }

    public int getSpeedY() {
        return speedY;
    }

    public void setCenterX(int centerX) {
        this.centerX = centerX;
    }

    public void setCenterY(int centerY) {
        this.centerY = centerY;
    }

    public void setJumped(boolean jumped) {
        this.jumped = jumped;
    }

    public void setSpeedX(int speedX) {
        this.speedX = speedX;
    }

    public void setSpeedY(int speedY) {
        this.speedY = speedY;
    }

}

这是我在 intelij 中的文件结构

在此处输入图像描述

代码有什么问题??我尝试了“../data/character.png”和“../src/data/character.png”,但它没有用。

4

4 回答 4

1
  • applet.html加载小程序的页面。
  • data(目录)
    • Character.png

如果这是server的结构,则图像将通过以下方式提供:

getImage(base, "data/character.png");

我在上面强调了服务器,因为这显然不是您的 IDE 的设置方式。


你能详细说明一下吗?

您打开了src/kilobolt路径以显示源文件的位置,但是如果您展开bin文件夹并向下跟踪,您可能会.class在目录中找到文件bin/kilobolt

IDE 通常不会使用 HTML 文件来加载小程序,但如果 IntelliJ 这样做,它可能会将其放在bin目录中,以便直接访问类文件。从那里到图像的路径是../data/character.png.,但建议您让 IDE 将图像复制到bin.

在这个阶段,它已经成为关于 IntelliJ 的问题,所以您有任何进一步的问题,都需要关于 IDE 和它使用的运行时类路径。

于 2013-04-29T03:39:05.167 回答
0

这似乎是一个图像问题。电脑找不到图片的位置,或者图片正在小程序下绘制。

如果您使用的是 linux/Mac/unix 机器,大多数时候,我不得不从根文件夹(例如 /Users/.....)开始到源文件夹,或者使用更接近的目录时,只需在它前面使用'/'。示例是:

您正在使用一个名为 src 的目录,其中包含一个“img”文件夹。要获取“img”内容,您有两种选择:

//......src/img

或者

/src/img/....

希望对任何事情都有帮助

于 2013-04-29T03:37:27.777 回答
0

将您的数据文件夹复制到 bin 文件夹中。清理项目并运行。

它会起作用的。

于 2015-03-09T08:23:04.810 回答
0

@Luiggi Mendoza我遇到了同样的问题,可以通过右键单击“character.png”并选择属性然后从根目录一直复制图像的位置来解决它。在我的情况下,它是“/Users/macbookpro/NetBeansProjects/Kilobolt/src/data/character.png”并且机器人出现在小程序窗口中。

是的,我正在和你 3 年前在同一个网站上学习游戏

于 2016-11-26T11:19:33.743 回答