访问java中的内部类



我是libGdx的初学者,我正在制作一个简单的游戏。

我写了一个嵌套类。正如你在这里看到的:

public class classes{
public class GameObject{

//declaring section
private Texture texture;
private Texture[] spawnAnimation;
private Texture[] deathAnimation;
private Texture[] damageAnimation;
private Texture[] moveAnimation;
private Texture[] fightAnimation;
private Texture[] talkAnimation;
private SpriteBatch batch = new SpriteBatch();


private float width, height;
private float x, y;

private Sound spawnSound, touchSound, deathSound, objSound, moveSound, fightSound;

public GameObject(Texture txtr, float width, float height, float x, float y) {
this.texture = txtr;
this.width = width;
this.height = height;
this.x = x;
this.y = y;
}

//this method checks wether our game object is over an other object
public boolean isOver(GameObject obj){
if(((this.x >= obj.x) && (this.x <= (obj.x + obj.width))) && ((this.y >= obj.y) && (this.y <= (obj.y + obj.height))))
return true;
return false;
}

//this method sets the object bounds
public void setBounds(float width, float height, float x, float y){
this.width = width;
this.height = height;
this.x = x;
this.y = y;
}

//this method draws the object
public void draw(){
batch.draw(this.texture, this.width, this.height, this.x, this.y);
}

//animation setting section
public void setSpawnAnimation(Texture[] texture){
this.spawnAnimation = texture;
}

public void setDeathAnimation(Texture[] texture){
this.deathAnimation = texture;
}

public void setDamageAnimation(Texture[] texture){
this.damageAnimation = texture;
}

public void setMoveAnimation(Texture[] texture){
this.moveAnimation = texture;
}

public void setFightAnimation(Texture[] texture){
this.fightAnimation = texture;
}

public void setTalkAnimation(Texture[] texture){
this.talkAnimation = texture;
}

//sounds setting section
public void setSpawnSound(Sound sound){
this.spawnSound = sound;
}

public void setTouchSound(Sound sound){
this.touchSound = sound;
}

public void setDeathSound(Sound sound){
this.deathSound = sound;
}

public void setObjSound(Sound sound){
this.objSound = sound;
}

public void setMoveSound(Sound sound){
this.moveSound = sound;
}

public void setFightSound(Sound sound){
this.fightSound = sound;
}

//animation and behavior section
public void spawn(){
batch.begin();
for(int i=0;i<=this.spawnAnimation.length;i++){
this.texture = this.spawnAnimation[i];
this.draw();
try
{
Thread.sleep(0, 1);
}
catch (InterruptedException e)
{}
}
batch.end();
}

public void die(Texture[] deathTexture){

}
}
}

我转到另一个类中的另一个文件,并尝试设置对象纹理

public class MyGdxGame implements ApplicationListener{
Texture texture;
SpriteBatch batch;
classes.GameObject gun;
@Override
public void create()
{
batch = new SpriteBatch();
gun = new classes.GameObject(new Texture(Gdx.files.internal("gun.png")), 0, 0, 300, 300);
}
@Override
public void render()
{        
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.end();
}
@Override
public void dispose()
{
}
@Override
public void resize(int width, int height)
{
}
@Override
public void pause()
{
}
@Override
public void resume()
{
}
}

一旦我尝试访问它。我就面临这样的错误:一个封闭类的实例是必需的

注意:我正在为android制作这款游戏。使用AIDE ide,它提供直接在手机上开发应用程序和游戏。

在不使用关键字static的情况下声明的内部类与它们所在的外部类绑定。

修复

public static class GameObject{

你为什么想要一个没有静态的内部类?这里有一个的例子

public class Game {
private Data gameData;
class MyListener {
public void receiveNewData(Data newData) {
//update gameData with the new data
}
}
}

如果MyListener是静态的,它将无法访问游戏的gameData

相关内容

  • 没有找到相关文章

最新更新