LibGdx-具有不同类型水滴的简单游戏
希望大家在此链接中了解基本的Libgdx游戏: 在这个简单的游戏中,雨滴从顶部随机落下,这是一种类型。 在我的例子中,我想实现与水滴相同的东西。不同的是,水滴有四种类型。当它与另一个对象碰撞时,四种应该显示四种不同的特征 简言之,我创建了一个包含对象和数组的Drop类,还可以生成Drop对象LibGdx-具有不同类型水滴的简单游戏,libgdx,Libgdx,希望大家在此链接中了解基本的Libgdx游戏: 在这个简单的游戏中,雨滴从顶部随机落下,这是一种类型。 在我的例子中,我想实现与水滴相同的东西。不同的是,水滴有四种类型。当它与另一个对象碰撞时,四种应该显示四种不同的特征 简言之,我创建了一个包含对象和数组的Drop类,还可以生成Drop对象 Drop drop=new Drop(); private Array<Drop> drops=new Array<Drop>(); 我编写的createRandom
Drop drop=new Drop();
private Array<Drop> drops=new Array<Drop>();
我编写的createRandomDrop()代码是这样的(但对我来说,你的代码令人困惑。我怎么能在方法中使用冒号符号呢?我从来没有使用过它。)
私有块createRandomDrop(){
开关(数学随机(0,3)){
案例0:
系统输出打印项次(“000000”);
返回objectFactory.createYellow();
案例1:
返回objectFactory.createGreen()
}
}
在这里,我对如何返回单个drop对象感到困惑。
尽管我写了这样的电话:
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) {
drops.add(createRandomDrop());
}
private void updateBlocks(float delta) {
Iterator<Drop> iter = drops.iterator();
while(iter.hasNext()) {
Drop b = iter.next();
b.update(delta);//moving drop from top to bottom in update()
if(b.getY()<0) iter.remove();
}
// System.out.println(drops.size);
abstract class Drop {
abstract Texture tex;
abstract Rectangle rect;
Drop(Texture tex, Rectangle rect){
// initialize values here
}
void showCollideAnimation(){ // example. here you can create your own void to show different characteristics.
tex.blabla()
}
void collide(){
showCollideAnimation();
}
// also draw, update methods etc... Hope you got that they should do functionality same for all children
}
drawdebug()位于Drop类中,我正在重写它
public void drawDebug(ShapeRenderer shapeRenderer) {
shapeRenderer.setColor(Color.YELLOW);
shapeRenderer.rect(collisionRectangle.x, collisionRectangle.y,
collisionRectangle.width,
collisionRectangle.height);
}
问题是,创建了太多的放置点,并且重叠。可能是开关盒造成了问题。您的问题是什么?这很简单 创建Drop类的4个子类。黄滴、绿滴等。。。并在Drop类中创建collide()方法,该方法将为所有子类实现相同的功能 大概是这样的:
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) {
drops.add(createRandomDrop());
}
private void updateBlocks(float delta) {
Iterator<Drop> iter = drops.iterator();
while(iter.hasNext()) {
Drop b = iter.next();
b.update(delta);//moving drop from top to bottom in update()
if(b.getY()<0) iter.remove();
}
// System.out.println(drops.size);
abstract class Drop {
abstract Texture tex;
abstract Rectangle rect;
Drop(Texture tex, Rectangle rect){
// initialize values here
}
void showCollideAnimation(){ // example. here you can create your own void to show different characteristics.
tex.blabla()
}
void collide(){
showCollideAnimation();
}
// also draw, update methods etc... Hope you got that they should do functionality same for all children
}
然后创建将覆盖ShowCollide动画方法的子对象
class GreenDrop extends Drop {
@override
void showCollideAnimation(){
.... // here you pass effect for Green child
}
}
要选择随机子对象,只需创建返回Drop的函数
Drop createRandomDrop(Rectangle rect): Drop {
switch (MathUtils.random(0, 3)) {
case 0 : return new YellowDrop(Texture("pathToYellowTexture"), rect) break;
case 1 : return new GreenDrop(Texture("pathToGreenTexture"), rect) break;
// etc.
}
}
现在您可以填充点滴列表
private ArrayList<Drop> drops = new ArrayList<Drop>();
in render method:
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) {
drops.add(createRandomDrop(Texture(""), Rectangle())); // specify texture and rectangle yourself
}
private ArrayList drops=new ArrayList();
在渲染方法中:
如果(TimeUtils.nanoTime()-lastDropTime>100000000){
添加(createRandomDrop(纹理(“”,矩形());//自己指定纹理和矩形
}
您有什么问题?这很简单
创建Drop类的4个子类。黄滴、绿滴等。。。并在Drop类中创建collide()方法,该方法将为所有子类实现相同的功能
大概是这样的:
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) {
drops.add(createRandomDrop());
}
private void updateBlocks(float delta) {
Iterator<Drop> iter = drops.iterator();
while(iter.hasNext()) {
Drop b = iter.next();
b.update(delta);//moving drop from top to bottom in update()
if(b.getY()<0) iter.remove();
}
// System.out.println(drops.size);
abstract class Drop {
abstract Texture tex;
abstract Rectangle rect;
Drop(Texture tex, Rectangle rect){
// initialize values here
}
void showCollideAnimation(){ // example. here you can create your own void to show different characteristics.
tex.blabla()
}
void collide(){
showCollideAnimation();
}
// also draw, update methods etc... Hope you got that they should do functionality same for all children
}
然后创建将覆盖ShowCollide动画方法的子对象
class GreenDrop extends Drop {
@override
void showCollideAnimation(){
.... // here you pass effect for Green child
}
}
要选择随机子对象,只需创建返回Drop的函数
Drop createRandomDrop(Rectangle rect): Drop {
switch (MathUtils.random(0, 3)) {
case 0 : return new YellowDrop(Texture("pathToYellowTexture"), rect) break;
case 1 : return new GreenDrop(Texture("pathToGreenTexture"), rect) break;
// etc.
}
}
现在您可以填充点滴列表
private ArrayList<Drop> drops = new ArrayList<Drop>();
in render method:
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) {
drops.add(createRandomDrop(Texture(""), Rectangle())); // specify texture and rectangle yourself
}
private ArrayList drops=new ArrayList();
在渲染方法中:
如果(TimeUtils.nanoTime()-lastDropTime>100000000){
添加(createRandomDrop(纹理(“”,矩形());//自己指定纹理和矩形
}
但是我将如何创建包含所有这些继承的子类对象的Drop类型的动态数组?请指定如何将子类对象添加到数组中。我从未使用过它,也不太清楚。这将非常有用。我尝试过,但再次卡住。创建子对象后,如何迭代drops数组?对于该对象,似乎应该创建它。但是我将如何创建一个公共对象?drops类是抽象的。我也尝试过不使用抽象。但是当我创建用于迭代的对象时,它会在创建的对象上抛出nullpointerexception。在createRandomDrop()中的开关大小写后返回语句这让人困惑。它现在几乎可以工作了!。谢谢你的帮助!唯一的问题是我必须控制从交换机创建的滴数。我希望到时候一切都会好起来。非常感谢!@但我将如何创建包含所有这些继承的子类对象的Drop类型的动态数组?请指定如何将子类对象添加到数组中。我从未使用过它,也不太清楚。这将非常有帮助。我尝试了此操作,但再次卡住。创建子对象后,如何迭代drops数组?对于该对象,似乎应该创建它。但是我将如何创建一个公共对象?drops类是抽象的。我也尝试过不使用抽象。但是当我创建用于迭代的对象时,它会在创建的对象上抛出nullpointerexception。在createRandomDrop()中的开关大小写后返回语句这让人困惑。它现在几乎可以工作了!。谢谢你的帮助!唯一的问题是我必须控制从交换机创建的滴数。我希望到时候一切都会好起来。非常感谢!@Icrumbast否决票的人至少可以留下评论。这样我就可以理解我做错了什么,并改进我的问题。我真诚地试图得到答案,以及如果有人否决票就走的话会是什么感觉。否决票的人至少可以留下评论。这样我就可以理解我做错了什么,并改进我的问题。我是真诚地试图得到一个答案,以及如果有人简单地投了反对票就走了会是什么感觉。