我正在编写一个关于处理的2D游戏库,我目前正处理物理方面的问题。我有一个名为Object的类 - 用于操作图像。我希望能够将我的Physics类“附加”到Object类 - 这样我就可以通过Object访问所有的Physics函数了,例如:
//Scroll to left to see more of comments
class Object extends Game{ //It's worth pointing out that all of my classes extend a Game class
Object(String name){ //A way to add an image to my Object and initialise the class fully
PImage image = loadImage(name);
}
void attachPhysics(){ //I want to be able to call this so that I can directly access functions in the Physics class
}
}
class Physics extends Game { //My Physics class also extends the Game class
Physics(){
//Main initialisation here
}
void projectile(int angle, int speed, int drag){
//Projectile code goes here
}
}
所以,如果我有这两个课程,那么我就可以这样打电话给他们:
//Scroll to left to see more of comments
void setup(){
Object ball = new Object("ball.gif");
}
void draw(){ //In processing draw is similar to main in java
ball.attachPhysics(); //I attach Physics
ball.projectile(40, 5, -1); //I should then be able to access Physics classes via the ball Object which can manipulate the ball Object (call on its functions as well)
}
如果有人可以帮我解决这个问题,我将不胜感激,如果你愿意,我可以发布完整的代码。值得注意的是,处理只是带有一些附加功能的java,而且这段代码目前还没有设置为库,只是直接从处理中编译。
答案 0 :(得分:0)
从命名约定来看,您的对象模型看起来并不适合我。对象不是游戏的属性,所以我看不到对象如何扩展游戏。物理学也一样。
根据我的理解,游戏是具有物体,玩家,图形等属性的整个物体。物体可以具有物理特性和其他属性。所以我首先要理顺对象模型。
关于你的问题,你可以创建一个对象可以调用的物理接口。您可以拥有一个物理库,它可以创建对象物理状态的实例并将它们附加到对象,这样在游戏过程中您就可以跟踪物理对象。即一颗子弹飞过太空。但这当然取决于你的物理实现方式。
答案 1 :(得分:0)
您无需创建“对象”类的新对象来附加物理对象。使用此选项将物理对象与当前/调用对象相关联。这是您更新的绘图方法:
void draw(){ //In processing draw is similar to main in java
this.attachPhysics(); //I attach physics
this.projectile(40, 5, -1); //I should then be able to access physics classes via the ball object which can manipulate the ball object (call on its functions as well)
}
答案 2 :(得分:0)
球和物理实例没有彼此参考。考虑做这样的事情(在设置或绘图中,或者在两个类之外的某些初始化例程中更好):
physics phys = new physics();
ball.attachPhysics(physics);
然后你可以在你的球中引用物理实例,你可以在它上面调用方法。可能物理方法projectile
也需要引用你的球,如下所示:
projectile(40, 5, -1, this);// this is the refence to the ball instance
除此之外,请考虑命名conventions of Java
即。以大写字母开头(并且不要将其称为对象)。