アプレットを使用してポータル ゲームの作成を開始したばかりです (はい、完全に時代遅れであり、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 );
};
}
}
助けてください?