【发布时间】:2017-12-08 19:56:35
【问题描述】:
希望大家都知道这个链接里的基本Libgdx游戏:
https://github.com/libgdx/libgdx/wiki/A-simple-game
在简单的游戏中,雨滴从顶部随机落下,属于一种。 就我而言,我想实现与水滴相同的东西。不同之处在于,水滴有四种类型。当它与另一个物体碰撞时,四种应该表现出四种不同的特征。
简而言之,我用它的对象和数组创建了一个 Drop 类,并且也可以生成 drop 对象。
Drop drop=new Drop();
private Array<Drop> drops=new Array<Drop>();
但是如果我想在这种情况下为 drop 定义单独的属性怎么办? 我希望将放置对象分为四种类型。例如有不同颜色的黄色、红色、绿色和蓝色。还有四种水滴应该从顶部随机落下。
以何种方式,我应该如何实现这样的概念?
如果我对此有所了解会非常有帮助。
编辑:
我有一个抽象类 Drop 和。我没有在构造函数中传递纹理和矩形。因为图形现在不适用于该项目。我计划在稍后阶段分配它。截至目前,我所做的一切我正在使用 shaperenderer。
我在我用来创建所有对象的 objectFactory 类中为三个不同颜色的水滴提供了 create() 方法:
public YellowDrop createYellow(){
YellowDrop yellow = new YellowDrop();
yellow.setSize(100f,100f);
yellow.setPosition(MathUtils.random(0, 800),1280);
return yellow;
}
public RedDrop createRed(){
RedDrop red = new RedDrop();
red.setSize(100f,100f);
red.setPosition(MathUtils.random(0, 800),1280);
return red;
}
public GreenDrop createGreen(){
GreenDrop green = new GreenDrop();
green.setSize(100f,100f);
green.setPosition(MathUtils.random(0, 800),1280);
return green;
}
我写了这样的 createRandomDrop() 代码(对我来说,你的代码很混乱。我怎样才能在方法中使用那个冒号?我从来没有用过。)
私有块 createRandomDrop() { 开关 (MathUtils.random(0, 3)) { 案例 0: System.out.println("000000"); 返回 objectFactory.createYellow(); 情况1 : return objectFactory.createGreen();
case 2 : return objectFactory.createRed();
default:
return objectFactory.createGreen();
} } 在这里,我对如何返回单个放置对象感到困惑。 即使我写了这样的电话:
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);
}
最后我正在为所有数组元素绘制 shaperenderer:
for (Drop b : drops) {
b.drawDebug(shapeRenderer);}
这个 drawdebug() 在 Drop 类中,我将覆盖它
public void drawDebug(ShapeRenderer shapeRenderer) {
shapeRenderer.setColor(Color.YELLOW);
shapeRenderer.rect(collisionRectangle.x, collisionRectangle.y,
collisionRectangle.width,
collisionRectangle.height);
}
问题是,创建和重叠的水滴太多。可能是开关盒造成了问题。
【问题讨论】:
-
投反对票的人至少可以发表评论。这样我就可以理解我做错了什么并改进我的问题。我真诚地试图得到答案以及如果有人投反对票的感觉简单地走吧。
标签: libgdx