我試圖將拍攝添加到我的遊戲中,但我無法將我的Player類更改爲抽象類型,或者它無法正常工作,因此我僅限於我可以執行的操作。併發症將圖形添加到KeyListener
我試過一百萬種不同的方法來解決這個問題,但都沒有成功。我搜索並搜索並觀看視頻教程無濟於事。這是我的最後一招,我肯定有人可以幫助我。
這是我的第一個小程序,但我不是新來的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,但是我不能使用keylistener和「Graphics g」,而沒有將我的Player類設置爲抽象類型,這是我不能做的,或者我的遊戲無法工作。我一直在尋找如何做到這一點,但無濟於事。對不起,如果這看起來有點奇怪,它可能只是重新啓動,但我已經在這工作了幾個小時。
第一個小程序..遊戲(動畫渲染)..觀看視頻教程.. - 組合和混合形成災難的食譜。你是否在一個框架或更好的面板中完成了遊戲渲染?我推薦在JFrame中交換'Applet',在'JPanel'中交換'paintComponent()'的'paint()',爲鍵綁定交換'KeyListener'。此外,爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。它是「Java小程序」,而不是「JAVA小程序」。 –