-1

アプレットでキャラクターを上下左右に動かしたいのですが、まったく動きません。ここに私のコードがあります、助けてください

import javax.swing.JPanel;

import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class drawCenter extends Applet
{
    private int x,y;// the x and y of the position of the player
    private BufferedImage image, pos;

    public void init(  )
    {
        try
        {
            image = ImageIO.read(new File("pokemonCenter.png"));
            pos = ImageIO.read(new File("player/maleInGame.png"));
        }
        catch (IOException ex)
        {

        }
        x = 150; y = 171;
    }

    public void keyPressed(KeyEvent e)
    {
        int keyCode = e.getKeyCode();

        switch( keyCode )
        {
            case KeyEvent.VK_UP: if( y>0 )
            {
                y=y-19;
                repaint();

            }

            break;
            case KeyEvent.VK_DOWN: if( y<171 )
            {
                y=y+19;
                repaint();

            }

            break;
            case KeyEvent.VK_LEFT:if( x>0 )
            {
                x=x-15;
                repaint();

            }

            break;
            case KeyEvent.VK_RIGHT:if( x<285 )
            {
                x=x+15;
                repaint();

            }

            break;
        }
        e.consume();
    }

    public void keyReleased(){

    }

    public void paint( Graphics g )
    {
        g.drawImage(image, 0, 0, null);
        g.drawImage(pos, x, y, null);
    }
}
4

4 に答える 4

1

あなたのコードは KeyListener を持っているふりをしていますが、どこにも KeyListener が見つからず、ましてや GUI のコンポーネントに追加されたものはありません。解決策: KeyListener を実装するクラスまたは KeyAdapter を拡張するクラスを作成し、それをフォーカスのある GUI コンポーネントに追加します。

確認してください: KeyListener の書き方

また、GUI クラスやアプレットに KeyListener を実装することは避けることをお勧めします。匿名の内部クラスを作成するか、KeyListener 用に別のスタンドアロン クラスを作成することをお勧めします。

于 2012-09-02T01:10:08.870 に答える
0

これを試して。

import javax.swing.*;
import java.awt.*;

import static java.awt.event.KeyEvent.*;

public class DrawCenter extends JApplet implements KeyListener {

    Image character = null;
    int x = 0;
    int y = 0;

    public Image loadImage(String name){
        return new ImageIcon(getClass().getClassLoader().getResource(name)).getImage();
    }

    public void init(){
        character = getImage("pokemonCenter.png");
        x = getWidth()/2 - character.getWidth(null)/2;
        y = getHeight()/2 - character.getHeight(null)/2;
        addKeyListener(this);
    }

    public void keyPressed(KeyEvent e){
        switch (e.getKeyCode()){
            case VK_LEFT: x--; break;
            case VK_RIGHT: x++; break;
            case VK_UP:    y--; break;
            case VK_DOWN: y++; break;
        }
        repaint();
    }

    public void paint(Graphics g){
        g.drawImage(character, x, y, null);
    }

}

ゲームを作成している場合は、ゲームのループを確認するか、Game-Engine (If you'r interested, go to http://game-engine-for-java.googlecode.com/ )

于 2012-09-02T01:14:05.993 に答える
0

あなたは次のようになるはずです:

package stack;


import java.applet.*;

import java.awt.event.*;

import java.awt.*;

public class DrawCenter extends Applet implements KeyListener{

    private int x=50,y=50;// the x and y of the position of the player


    public void init(  ){ 
        addKeyListener(this);
    }

    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();

        switch( keyCode ) { 
            case KeyEvent.VK_UP: if( y>0 ){ //when up key is pressed and the position of the player is not on the edge
                                y=y-19;
                                repaint();
                            }
                            break;
        case KeyEvent.VK_DOWN: if( y<171 ){//when down key is pressed and the position of the player is not on the edge
                                    y=y+19;
                                    repaint();
                                }
                                break;
        case KeyEvent.VK_LEFT:  if( x>0 ){
                                    x=x-15;
                                    repaint();
                                }
                                break;
        case KeyEvent.VK_RIGHT: if( x<285 ){
                                    x=x+15;
                                    repaint();
                                }
                                break;
        }
    } 

    public void keyReleased(){

    }


    public void paint( Graphics g ){ //will draw the background and the character
        g.fillRect(x, y, 20, 20);

    }

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

    }

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

    }
}
于 2012-09-02T01:15:03.943 に答える
0

クラスを実装してから、コンストラクターKeyListenerを呼び出します。super.addKeyListener(this)あなたが今持っているように、クラスがインターフェースを実装することを指定していません(必要なメソッドを実装しているにもかかわらず)、リスナーをApplet.

于 2012-09-02T01:11:21.637 に答える