我是处理/ Java的新手,我尝试制作一个小游戏...... 我已经创建了一个用于制作地图或布局的类,我将其称为Map类,它工作正常,我可以使用数组/图像或仅使用对象来创建“地图”。 所以现在我想在我的游戏中加入一些单位。它们不应该那么困难或复杂。我只是想移动他们,继承我的班级单位:
class Unit
{
int X;
int Y;
int Breite;
int Laenge;
boolean ausgewaelht = false;
Unit()
{
}
Unit(int x, int y, int breite, int laenge)
{
}
/ ---------------------------------------------- ---------------------
void create(UnitContent function)
{
function.form();
}
void move(float geschwindigkeit)
{
if(isTriggerd(X,Y,Breite,Laenge) == true){
X = X+(int)geschwindigkeit;
if(X > width)
{
X = 0;
}
}
}
void setXandY(int x , int y)
{
X = x;
Y = y;
}
void setBreiteandLaenge(int breite, int laenge)
{
Breite = breite;
Laenge = laenge;
}
/ ---------------------------------------------- ----------------------
int getX()
{
return X;
}
int getY()
{
return Y;
}
int getBreite()
{
return Breite;
}
int getLaenge()
{
return Laenge;
}
/ ---------------------------------------------- ----------------------
boolean isTriggerd(int x, int y, int breite, int laenge)
{
if(mouseX > x && mouseX < x+breite && mouseY > y && mouseY < y+laenge )
{
return true;
}
else
{
return false;
}
}
}
如果我只使用1个单位,它可以正常工作^我可以亲自在课堂外选择我的单位在屏幕上绘制的形式......但是我如何绘制10个呢?
继承我的界面UnitContent:
interface UnitContent
{
void form();
}
继承我的MainClass
Map testKarte;
Unit[] TestEinheit = new Unit[100];
int[][] array = {{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}};
int a = 0;
void setup()
{
size(500,500);
testKarte = new Map(1,1,"",50,50);
for(int i = 0; i < TestEinheit.length; i++)
{
TestEinheit[i] = new Unit();
TestEinheit[i].setXandY(0,0);
TestEinheit[i].setBreiteandLaenge(50,50);
}
}
void draw()
{
background(#FFFFFF);
testKarte.setCisClickable(true);
testKarte.setIsRectOrPicture(true);
testKarte.ubdate(new MapContent(){
public void setMapContent(int a, int b, int c, int d){
// rect(a,b,c,d);
for( int i = 0; i < TestEinheit.length; i++)
{
TestEinheit[i].create(new UnitContent()
{
public void form()
{
rect(TestEinheit[i].getX(),TestEinheit[i].getY(),TestEinheit[i].getBreite(),TestEinheit[i].getLaenge());
}
});
}
}
public void setMapContentMouseOver(){
}
public void elseMapContentMouseOver()
{
// wenn die Maus nicht über dem Object ist
// ebenfalls nicht unbedingt
}});
}
void mousePressed()
{
}
当我尝试以下时:
for( int i = 0; i < TestEinheit.length; i++)
{
TestEinheit[i].create(new UnitContent()
{
public void form()
{
rect(TestEinheit[i].getX(),TestEinheit[i].getY(),TestEinheit[i].getBreite(),TestEinheit[i].getLaenge());
}
});
它给出了以下错误:无法引用我在封闭范围内定义的非最终局部变量 顺便说一句,public void form只是一种接口方法:)
任何人都知道如何处理这个问题?
答案 0 :(得分:0)
我正在寻找一种方法来处理......如果没有这个错误我怎么能这样做?
您有几个选项,具体取决于您希望form
方法查看的内容
i
值,或UnitContent
的值,因为i
被称为之后 UnitContent#form
时i
的值 您需要一个UnitContent
的子类,它接受UnitContent
作为构造函数中的参数,将其存储在字段中,并在i
中使用它。
E.g:
form
和
abstract class MyUnitContent extends UnitContent {
protected int i;
public MyUnitContent(int i) {
this.i = i;
}
}
(请注意,如果TestEinheit[i].create(new MyUnitContent(i) {
public void form() {
Unit entry = TestEinheit[this.i];
rect(entry.getX(), entry.getY(), entry.getBreite(), entry.getLaenge());
}
});
是本地的,则必须为TestEinheit
。)
final
被称为之后 i
限制是您只能访问UnitContent#form
变量;它并不一定表示这些变量不能引用具有可变状态的对象。
所以你可以让final
成为一个数组,例如:
i
现在,当final int[] i = new int[1];
for (i[0] = 0; i[0] < TestEinheit.length; i[0]++) {
TestEinheit[i].create(new UnitContent() {
public void form() {
Unit entry = TestEinheit[i[0]];
rect(entry.getX(), entry.getY(), entry.getBreite(), entry.getLaenge());
}
});
}
被调用时,它会读取form
在调用它时的值(在上面的代码中,对于所有这些都是i[0]
)。< / p>
(请注意,如果TestEinheit.length
是本地的,则它也必须是TestEinheit
。)