当前位置: 首页 > 知识库问答 >
问题:

矩形Arraylist Libgdx仅为最后一个工作

羊舌青青
2023-03-14

最近我在做一个像涂鸦跳跃这样的游戏,但是我有一个问题:

我为球员将要坠落的平台制作了一个动态阵列

ArrayList<Rectangle> plRec = new ArrayList<Rectangle>();

然后我在阵列中随机添加11个平台,然后在冰柱之后添加另一个平台,在那里将创建玩家!

//in the create method
plTxt = new Texture(Gdx.files.internal("ghiaccio.png"));

recPartenza = new Rectangle(); //the rectangle where the player starts 
recPartenza.height = 25;
recPartenza.width = 100;
recPartenza.x = 50;
recPartenza.y = 10;

for(int i = 0; i <= 10; i++) { //11 rectangle added to the array
    Rectangle rec = new Rectangle();
    rec.height = 25;
    rec.width = 100;
    rec.x = MathUtils.random(50, 620);
    rec.y = MathUtils.random(50, 620);
    plRec.add(rec); //this add the rectangles randomlyzed to the array
}
plRec.add(recPartenza); // i add the start rectangle to the array

最后这将在屏幕中渲染。在我做了一个在渲染方法中接收玩家位置和平台位置的方法之后:

for (Rectangle rectangle: plRec) {
    if (IsOnTop(new Vector2(dpRec.x, dpRec.y), dpRec, new Vector2(rectangle.x, rectangle.y), rectangle)) {                                                                    
        //return true or false if the playes is on 3px up the platform
        gravity = 0;//player stops
    }
    else {
        gravity = 5; //plyer continue to fall
    }   
}   

玩家仅停止阵列上的最后一个矩形!为什么会这样?我想让球员们堵住所有的矩形

共有1个答案

阮星火
2023-03-14

这是一个常见的错误。您需要决定是否有任何矩形与谓词匹配。在这种情况下,谓词是“玩家站在这个矩形上”。

您可以将其更改为:

boolean playerStands = false; //if player stands on any platform
for (Rectangle rectangle : plRec) {
    if (/*same condition*/) {
        playerStands = true;
        break; //no need to check the other ones
    } //no else
}
gravity = playerStands ? 0 : 5;
 类似资料:
  • 在上面的图片中,我展示了两个矩形 矩形1,其x可以从-900到13700不等,Y可以从-600到6458 矩形2,其坐标X可以从0到3000变化,而y可以从0到2000变化 同样:矩形2的起点位于左上角位置(0,0),而矩形1的起点位于左上角位置(宽度/2,高度/2)。 我需要做的是:使用缩放或平移将矩形1的点转换为矩形2的点。 那么,为了将矩形1的坐标转换为矩形2的坐标,< code>x和< c

  • 我有两个矩形:红色和绿色。对于它们中的每一个,我有以下信息: 中心点( 和 坐标)。 旋转角度 宽度和高度 矩形将始终以正坐标移动。编辑:没有坐标可以是负的:矩形总是位于正坐标。因此,中心永远不会是(0,0)。 问题 我有一个起始位置。为了简化示例,假设我的红色和绿色矩形的位置如下: 现在,我使用0º和90º之间的角度φ旋转红色矩形。但是,绿色矩形需要旋转并保持其相对于红色矩形的位置。绿色矩形不仅

  • 我正在重温LibGDX游戏编程,不幸的是,我不得不重新学习我以前知道的东西。 我目前正在使用平铺地图编辑器制作一个非常简单的大金刚风格关卡。我总共有大约20个矩形。 我在我的主要游戏屏幕类中创建了一个box2d世界,并有一个for循环来将矩形对象放入世界和调试器。 我的问题是,只有我绘制的底部(和第一个)矩形出现。我已经检查了比例,还放了一个println(),它告诉我已经解析了对象信息,所有的矩

  • 本节课通过绘制一个矩形边框效果,对WebGL整个渲染流程有一个简单认知。 学习建议 学习本节课,建议先结合注释看看案例源码,对于不熟悉的WebGL API可以在MDN搜索文档,不过刚开始学习,没必要去掌握每一个WebGL API,把主要精力放在理解WebGL的整个渲染流程上面,如果你能建立渲染管线的概念,自然对WebGL系统会有一个基本的认知。 源码体验测试 //类型数组构造函数Float32Ar

  • 问题内容: 创建哪一个将坐标从一个矩形映射到另一个矩形(给出浮动/双矩形)的最简单方法是什么? 更新1 矩形可以完全不同。例如[(0,0)-(1,1)]和[(150,-14)-(-1000,-14.1)]。并且转换应该统一转换。例如,矩形角应一一变换。例如,坐标(0,0)应该变成(150,-14)。 更新2 我需要对象,而不仅仅是计算。因为我想将其应用于对象。我也想以一些简单转换的串联形式。 更新

  • 假设我有一组矩形(维度不同或相同)。 任务是从集合中查找(并删除)大于或等于给定矩形的矩形 它也应该是集合中可以包含给定矩形的最小矩形 这很容易通过线性搜索/更新在O(n)时间内解决,但是有可能获得更好的结果吗?我认为O(log n)是最佳值。Insert和removal也必须比O(n)快,这样在我的例子中才有用。 是否可以通过不找到最佳矩形来制定任何快捷方式,而是将第二个限制放宽为:“它也应该是