ゲームに射撃を追加しようとしていますが、Playerクラスを抽象に変更できないか、正しく機能しないため、実行できる操作に制限があります。
私はこれにアプローチするために何百万もの異なる方法を試しましたが、どれもうまくいきませんでした。私は無駄にビデオチュートリアルを検索し、検索し、見ました。これが私の最後の手段です。誰かが私を助けてくれると確信しています。
これは私の最初のアプレットですが、Javaは初めてではありません。これは2Dゲームではありません。これは私が取り組んできた基本的な実験にすぎません。
MainClass.java
/**
*
* @author Alexander Benoit
*/
import java.applet.*;
import java.awt.*;
public class MainClass extends Applet implements Runnable {
private static final long serialVersionUID = 1L;
Thread thread = new Thread(this);
boolean running = true;
Player p;
Enemy e;
Image dbImage;
Graphics dbg;
int xpos;
int ypos;
int mousex;
int mousey;
@Override
public void init() {
setSize(400, 400);
p = new Player(this);
e = new Enemy(this);
}
@Override
public void start() {
thread.start();
}
@Override
public void destroy() {
running = false;
}
@Override
public void stop() {
running = false;
}
@Override
public void run() {
while (running) {
repaint();
p.update(this);
e.update(this, p);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
System.out.print("Error occured");
}
}
}
@Override
public void update(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paint(dbg);
g.drawImage(dbImage, 0, 0, this);
}
@Override
public void paint(Graphics g) {
g.drawString("Game", 180, 20);
p.paint(g, this);
e.paint(g, this);
}
}
Player.java
/**
*
* @author Alexander Benoit
*/
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
public class Player implements KeyListener {
private int x = 200, y = 200, velX = 0, velY = 0;
private URL url;
private Image player;
private Image playerimg;
private Image Image;
public boolean isShooting;
public Player(MainClass mc) {
url = mc.getDocumentBase();
player = mc.getImage(url, "http://i563.photobucket.com/albums/ss75/belhelmiel/player-1.png");
}
public void update(MainClass mc) {
mc.addKeyListener(this);
x += velX;
y += velY;
}
public void paint(Graphics g, MainClass mc) {
g.drawImage(player, x, y, mc);
g.drawString("X:" + x + " Y:" + y, 10, 10);
//g.drawRect(x, y, 50, 50);
}
@Override
public void keyTyped(KeyEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_SPACE: {
//This should make the player start shooting
//I've tried a million different things
//each one gave me some kind of problem primarily
//because I can't set this class to abstract
break;
}
case KeyEvent.VK_RIGHT: {
if (x >= 430) {
x = -40;
}
velX = 2;
break;
}
case KeyEvent.VK_LEFT: {
if (x <= -40) {
x = 430;
}
velX = -2;
break;
}
case KeyEvent.VK_UP: {
if (y <= -35) {
y = 430;
}
velY = -2;
break;
}
case KeyEvent.VK_DOWN: {
if (y >= 400) {
y = -30;
}
velY = 2;
break;
}
}
}
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_SPACE: {
//This should make the player stop shooting
break;
}
case KeyEvent.VK_RIGHT: {
velX = 0;
break;
}
case KeyEvent.VK_LEFT: {
velX = 0;
break;
}
case KeyEvent.VK_UP: {
velY = 0;
break;
}
case KeyEvent.VK_DOWN: {
velY = 0;
break;
}
}
}
public int getX() {
return x;
}
public int getY() {
return y;
}
void restart() {
x = 200 - 38 / 2;
y = 200 - 38 / 2;
}
}
Enemy.java
import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;
/**
*
* @author Alexander Benoit
*/
public class Enemy {
private int x = 50, y = 50, Speed=3;
private URL url;
private Image enemy;
public Enemy(MainClass mc) {
url = mc.getDocumentBase();
enemy = mc.getImage(url, "http://i563.photobucket.com/albums/ss75/belhelmiel/enemy.png");
}
public void update(MainClass mc, Player p) {
x+=Speed;
if(x<=0){
Speed=3;
}else if(x>=mc.getWidth()-33){
Speed=-3;
}
Collision(p);
}
public void paint(Graphics g, MainClass mc) {
g.drawImage(enemy, x, y, mc);
}
private void Collision(Player p) {
int PX = p.getX();
int PY = p.getY();
if(PX-38 <= x && PX+38 >= x && PY-38 <= y && PY+38 >= y) {
p.restart();
System.out.print("Collision Detected");
}
}
}
十分な情報を提供できない場合は申し訳ありませんが、長い間これを理解しようとした後、オンラインで役立つ情報が見つからないため、私自身も情報が不足しています。
要約:スペースバーがプレイヤーによって押されたときに、ある種の弾丸を発射させる必要があります。keylistenerの使用方法は知っていますが、Playerクラスをabstractに設定しないと、「Graphics g」でkeylistenerを使用できません。これは、実行できないか、ゲームが機能しません。私はこれを行う方法を見つけようと永遠に検索しましたが、役に立ちませんでした。これがちょっと奇妙に思えるなら申し訳ありませんが、私は再起動したほうがいいかもしれませんが、私はこれに何時間も取り組んできました。