我是学生,我正在尝试使用Slick2D进行Java游戏,但我有一个我不明白的问题。我有一些clases,从某些我可以得到变量,但在某些我不能,它似乎都一样。
例如,我有Gameplay游戏,其中包含所有游戏逻辑和渲染:
public class Gameplay extends BasicGameState {
private GeneradorNiveles gen;
private ComprobadorColisiones comp;
private Player p;
private Bullet[] bAr;
private int bArpos;
private Bullet bala;
private boolean bActiva = false;
private int curBul = 0;
private int MAXBALAS =50;
private Rectangle[] eRect;
private Rectangulo r;
private Input input;
private Random rnd;
private Enemy[] eAr;
private Enemy en;
private int eArpos;
private float curVel, curX;
private int MAXENE = 5;
private Image fondo;
private String ref = "res/fondo.png";
public Gameplay(){
}
@Override
public void init(GameContainer gc, StateBasedGame sbg)
throws SlickException {
comp = new ComprobadorColisiones();
r = new Rectangulo();
gen = new GeneradorNiveles();
gen.init(gc);
eRect = new Rectangle[MAXBALAS];
rnd = new Random();
p = new Player(300,500);
fondo = new Image(ref);
eAr = new Enemy[MAXENE];
en = new Enemy();
curVel= rnd.nextFloat();
bAr = new Bullet[MAXBALAS];
bala = new Bullet();
// Llena el array de eAr con enemigos//
crearNuevosEnemigosY0();
//
//Llena el array b con las balas//
llenarArrayBalas();
//
}
@Override
public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
throws SlickException {
input = gc.getInput();
fondo.draw(0, 0); // Dibujamos el fondo//
p.render(gc, g); // Ejecuta el render del player //
//For que carga todos los render de todas las balas
for(Bullet bu : bAr){
bu.render(gc, g);
if(input.isKeyPressed(Input.KEY_SPACE)){
bArpos = bu.getPos();
bAr[curBul] = new Bullet(bala.getX(), bala.getY());
curBul +=1;
if(curBul >=MAXBALAS){
curBul = 0;
}
if(bu.getY()<0){
bAr[bArpos] = new Bullet(bala.getX(), bala.getY());
}
}
}
//For que carga todos los renders de todos los enemigos del array//
for(Enemy en : eAr){
en.render(gc, g);
//If que comprueba si llega al final y crea otros nuevos
if(en.getY()>600){
eArpos = en.getPos();
crearNuevoEnemigoMuerto(eArpos);
//crearNuevosEnemigos();
}
}
}
@Override
public void update(GameContainer gc, StateBasedGame sbg, int delta)
throws SlickException {
comp.doy();
p.update(gc, delta); // Ejecuta el update del player//
//For donde hace el update de todas las balas del Array
for(Bullet bu : bAr){
bu.update(gc, delta);
}
input = gc.getInput();
if(input.isKeyPressed(Input.KEY_ESCAPE)){
Main.app.exit();
}
//Envia el valor de la x de la bala a la x de la b
else if(input.isKeyDown(Input.KEY_SPACE)){
bala.setX(p.getX()+20);
bala.setY(p.getY());
comp.setxEn(en.getX());
}
//
//For donde hace el update de todos los enemigos de la Array
for(Enemy en : eAr){
try {
en.update(gc, delta);
} catch (InterruptedException e) {
e.printStackTrace();
};
}
}
public void crearNuevosEnemigosY0(){
for (int i = 0; i < eAr.length; i++) {
curVel= rnd.nextFloat();
while(curVel>0.2f || curVel<0.1f){
curVel= rnd.nextFloat();
}
eAr[i] = new Enemy(20+i*5, 0, i, curVel);
}
}
public void crearNuevoEnemigoMuerto(int eApos){
curVel = rnd.nextFloat();
curX = eApos*50/rnd.nextFloat();
while(curVel>0.4f || curVel<0.1f){
curVel= rnd.nextFloat();
}
while(curX<50 || curX>395){
curX = rnd.nextInt(395);
}
eAr[eApos] = new Enemy(curX, 0, eApos, curVel);
}
public void llenarArrayBalas(){
for (int i = 0; i < bAr.length; i++) {
bAr[i] = new Bullet(i);
}
}
@Override
public int getID() {
return 0;
}
public int geteArpos() {
return eArpos;
}
public void seteArpos(int eArpos) {
this.eArpos = eArpos;
}
}
那两个:
玩家类:
public class Player {
private Image pImg;
private String ref = "res/player.jpg";
private float x,y;
private Bullet b;
private int limite = 430;
private Input input;
private float vel = 0.5f;
boolean shoot = false;
public Player(){
}
public Player(float x, float y){
this.x = x;
this.y = y;
}
public void init(GameContainer gc) throws SlickException {
// b = new Bullet();
}
public void render(GameContainer gc, Graphics g) throws SlickException {
//pImg.draw(x,y);
g.drawImage(new Image(ref), x, y);
g.drawString(String.valueOf(x), 20, 30);
}
public void update(GameContainer gc, int delta) throws SlickException {
input = gc.getInput();
if(input.isKeyDown(Input.KEY_LEFT)){
if(x>0){
x -= vel * delta;
}
}else if(input.isKeyDown(Input.KEY_RIGHT)){
if(x<limite){
x += vel * delta;
}
}
}
public Input returnImput(){
return input;
}
public boolean isShoot() {
return shoot;
}
public void setShoot(boolean shoot) {
this.shoot = shoot;
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public float getVel() {
return vel;
}
public void setVel(float vel) {
this.vel = vel;
}
}
敌人类:
public class Enemy {
private GeneradorNiveles gen;
private Gameplay gp;
private float x, y;
private int pos;
private int eArpos;
private float vel = 0.5f;
private float velH = 0.2f;
private int valor = 1, contador ;
private String ref = "res/sE1.png";
private int aux;
private Rectangle eRect;
public Enemy(){
}
public Enemy(int eArpos){
this.eArpos = eArpos;
}
public Enemy(float x, float y, int pos, float vel){
this.x = x;
this.y = y;
this.pos = pos;
this.vel = vel;
}
public void init(GameContainer gc) throws SlickException {
gp = new Gameplay();
gen = new GeneradorNiveles();
}
public void render(GameContainer gc, Graphics g) throws SlickException {
g.drawImage(new Image(ref), x , y);
//g.draw(eRect = new Rectangle(x,y,20,20));
}
public void update(GameContainer gc, int delta) throws SlickException, InterruptedException {
animacionEnemigo(delta);
//System.out.println(eArpos);
}
public void animacionEnemigo(int delta){
contador += delta;
switch(valor){
case 1:
x -= velH * delta;
if((x)<50){
contador = 6000;
}
break;
case 2:
x += velH * delta;
if((int)x>395){
contador = 6000;
}
break;
}
y += vel * delta; // Velocidad//
if(contador>5000){
contador = 0;
if(valor == 1){
valor = 2;
}else if(valor == 2){
valor = 1;
}
}
pasarVar();
}
public void pasarVar(){
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public int getPos() {
return pos;
}
public Rectangle geteRect() {
return eRect;
}
public void seteRect(Rectangle eRect) {
this.eRect = eRect;
}
所以我可以在其他课程中获得玩家而不是来自敌人的变量,我不知道出了什么问题。有人能帮我吗?
谢谢