-1

アプレットを使用してポータル ゲームの作成を開始したばかりです (はい、完全に時代遅れであり、swing blah blah blah を使用する必要があることはわかっています)。これまでのところ、問題は 1 つしか発生していません。ブラウザ/appletviewer は自動的に paint と init を呼び出すだけです。キーイベントを必要とするメソッドを呼び出したい場合、init は何も受信せず、paint は Graphic のみを受信するため、それは発生しません。そのため、ちょっと重要な thinkerbox メソッドを呼び出すことができません。これまでの私のコードは次のとおりです(2つのクラスで):

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class portal extends Applet
{

public Image stickA;
public int x = 90;
public int y = 20;

public void init()
{
    stickA = getImage( getDocumentBase(), "stick.jpg" );
}

public void thinkerbox( Graphics screen, KeyEvent e )
{
    addKeyListener(new keyaction());
    keyaction asdf = new keyaction();
    asdf.useKeys( e, screen );
}

public void moveRight( Graphics screen )
{
    addKeyListener(new keyaction());
    screen.setColor( Color.WHITE );
    screen.fillRect( x, y, 100, 100 );
    x += 10;
    paint( screen );
}

public void moveLeft( Graphics screen )
{
    screen.setColor( Color.WHITE );
    screen.fillRect( x, y, 100, 100 );
    x -= 10;
    paint( screen );
}

public void moveUp( Graphics screen )
{
    screen.setColor( Color.WHITE );
    screen.fillRect( x, y, 100, 100 );
    y += 10;
    paint( screen );
}

public void moveDown( Graphics screen )
{
    screen.setColor( Color.WHITE );
    screen.fillRect( x, y, 100, 100 );
    y -= 10;
    paint( screen );
}

public void paint( Graphics screen )
{
    setBackground( Color.WHITE );

    screen.setColor( Color.RED ); 
    screen.fillOval( 20, 20, 40, 80 ); //red portal1
    screen.fillOval( 200, 200, 40, 80 ); //red portal2

    screen.drawImage( stickA, x, y, 100, 100, this );
}
}

そして2番目のもの:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class keyaction extends KeyAdapter
{

public void useKeys( KeyEvent e, Graphics screen )
{
    int keycode = e.getKeyCode();
    portal p = new portal();

    p.thinkerbox( screen, e );

    if( keycode == KeyEvent.VK_LEFT )
    {
        p.moveLeft( screen );
    }
    else if( keycode == KeyEvent.VK_RIGHT )
    {
        p.moveRight( screen );
    }
    else if( keycode == KeyEvent.VK_UP )
    {
        p.moveUp( screen );
    }
    else if( keycode == KeyEvent.VK_DOWN )
    {
        p.moveDown( screen );
    };
}
}

助けてください?

4

1 に答える 1

1

提案:

  1. はい、Swing を使用します。そうしない理由はありません。
  2. KeyListener の代わりにキー バインディングを使用します。
  3. バインディング アクションで move メソッドを呼び出します。
  4. これらのメソッドでクラスの状態を変更します。つまり、1 つまたは複数のクラス フィールドの値を変更します。
  5. それから電話するrepaint()
  6. 描画 JComponent のpaintComponent(Graphics g)メソッドでクラス フィールドを使用して、何をどこに描画するかを決定します。
于 2013-03-29T02:46:44.333 に答える