LibGdx-具有不同类型水滴的简单游戏

LibGdx-具有不同类型水滴的简单游戏,libgdx,Libgdx,希望大家在此链接中了解基本的Libgdx游戏: 在这个简单的游戏中,雨滴从顶部随机落下,这是一种类型。 在我的例子中,我想实现与水滴相同的东西。不同的是,水滴有四种类型。当它与另一个对象碰撞时,四种应该显示四种不同的特征 简言之,我创建了一个包含对象和数组的Drop类,还可以生成Drop对象 Drop drop=new Drop(); private Array<Drop> drops=new Array<Drop>(); 我编写的createRandom

希望大家在此链接中了解基本的Libgdx游戏:

在这个简单的游戏中,雨滴从顶部随机落下,这是一种类型。 在我的例子中,我想实现与水滴相同的东西。不同的是,水滴有四种类型。当它与另一个对象碰撞时,四种应该显示四种不同的特征

简言之,我创建了一个包含对象和数组的Drop类,还可以生成Drop对象

   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否决票的人至少可以留下评论。这样我就可以理解我做错了什么,并改进我的问题。我真诚地试图得到答案,以及如果有人否决票就走的话会是什么感觉。否决票的人至少可以留下评论。这样我就可以理解我做错了什么,并改进我的问题。我是真诚地试图得到一个答案,以及如果有人简单地投了反对票就走了会是什么感觉。