2013-04-29 16 views
0

Я следовал этой обучающей программе hereапплета не показывает изображение

и я скачал исходный код и побежал, но изображение не отображается.

вот результат enter image description here

Я ожидал, что результат будет, как этот enter image description here же в результате в учебнике.

Вот код: 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 
    } 
} 

Robot.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

enter image description here

Что случилось с код?? Я tride «../data/character.png» и «../src/data/character.png», но он не работал.

+0

Вместо обучения AWT, почему бы вам не узнать свинг? Вы можете начать с учебника Swing в [Как сделать апплет] (http://docs.oracle.com/javase/tutorial/uiswing/components/applet.html). – camickr

+1

Я не вижу большой разницы между использованием awt и swing. Поскольку моя цель состояла в том, чтобы иметь базовое понимание того, как работает разработка игр ^^ – Tifa

+0

Существует большая разница. Картина делается по-другому, вы используете разные компоненты. – camickr

ответ

1
  • applet.html страница загрузки апплета.
  • data (каталог)
    • Character.png

Если это структура сервера, изображение будет доступен:

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

Я подчеркнул сервер выше s что, по-видимому, не так, как настроена ваша IDE.


Можете ли вы подробнее?

Вы открыли src/kilobolt путь, чтобы показать расположение исходных файлов, но вы раскроете папку bin и отслеживать вниз, вы, вероятно, найти .class файлы в каталоге bin/kilobolt.

IDE обычно не будет использовать HTML-файл для загрузки апплета, но если бы IntelliJ сделал это, он, вероятно, поместил бы его в каталог bin, чтобы он имел прямой доступ к файлам классов. Путь оттуда к изображению будет ../data/character.png, но вместо того, чтобы использовать этот путь, предложите вам получить IDE для копирования изображения в bin.

На этом этапе стало известно о IntelliJ, поэтому любые дополнительные вопросы, которые у вас есть, должны быть связаны с IDE и используемым в нем классом классов времени выполнения.

+0

Можете ли вы разработать больше? Я также попробовал это в eclipse, но в той же проблеме. – Tifa

+0

К сожалению, о том, что ^^ – Tifa

0

Это, кажется, проблема с изображением. Компьютер не может найти местоположение изображения, или изображение рисуется под апплетом.

Если вы используете машину linux/Mac/unix, большую часть времени мне приходилось либо запускать из корневой папки, например /Users/..... в исходную папку, либо при использовании каталога это ближе, просто используйте '/' перед ним. Пример:

Вы используете каталог с именем src с внутренней папкой «img». Для того, чтобы добраться до содержимого 'IMG', у вас есть два варианта:

//......src/img

или

/ЦСИ/IMG/....

Надеюсь, что это помогло с чем-либо

+0

Nope im using windows ^^ – Tifa

0

Скопируйте папку с данными в папку bin. Очистите проект и запустите его.

Будет работать.

0

@Luiggi Mendoza У меня была такая же проблема, и я смог решить ее, щелкнув правой кнопкой мыши на 'character.png' и выбрав свойства, а затем скопировав местоположение изображения полностью из его корня. В моем случае это было «/Users/macbookpro/NetBeansProjects/Kilobolt/src/data/character.png» и бинго, что робот появился в окне апплета.

И да, я учусь игре с того же сайта, как вы были 3 года назад

Смежные вопросы