class - 试图在两个不同的类之间进行碰撞
问题描述
抱歉,我没有在这里发布我的代码,但格式搞砸了,无法正确发布。我正在尝试制作一个游戏,其中玩家控制一艘船,小行星从屏幕右侧进入,玩家必须避开它们。对于我的生活,我无法弄清楚如何让小行星与玩家相撞导致玩家失败并且可以使用一些帮助。
解决方案
你很接近。
在函数 move() 中,您计算玩家的新 x 和 y 位置:
void move() {
int r = d>>1;
sx = constrain(sx + v*(int(isRight) - int(isLeft)), r, width - r);
sy = constrain(sy + v*(int(isDown) - int(isUp)), r, height - r);
}
接下来,您需要检查玩家位置是否在小行星的边界内。
这是来自您在 Display() 函数中的代码:
void display() {
image(ship, sx, sy, 100, 50);
if (sx > a1x && sx < a1x && sy > a1y && sy < a1y){
image(explo, sx, sy, 200, 200);
}
这是正确的方向,但会检查玩家和小行星的 x 和 y 是否完全匹配。这是非常不可能的,因为它是玩家和小行星的确切角落。此外,播放器可能每帧移动超过 1 个像素,导致它跳过触发器。
而是试试这个:
if (sx > a1x && sx < a1x +asteroid.aw && sy > a1y && sy < a1y+asteroid.ah)
这将检查玩家 x/y 是否在小行星的边界内。并且应该得到你想要的结果。但是,这还没有考虑玩家飞船的高度/宽度。所以你也应该检查
if (sx+player.width > a1x && sx+player.width< a1x +asteroid.aw && sy+player.height> a1y && sy+player.height< a1y+asteroid.ah)
最后,我将对您的代码进行一般性评论。有很多重复。我假设您正在学习,所以没关系,但请允许我给您一些指示,这将使编写代码变得更加简单:使用ArrayLists和扩展对象的使用
ArrayList<Asteroid> List_Of_Asteroids = new ArrayList<Asteroid>();
List_Of_Asteroids.add(new Asteroid(random(X1,X2), random(Y1,Y2))
这将创建一个列表,您可以在其中添加或删除小行星对象。这使得对所有小行星执行相同的操作变得容易,因为您只需键入一次。也可以减少代码。例如:
player.move();
for (Asteroid rock : List_Of_Asteroids){
if (player.collisionCheck(rock)){
gameOver(); //triggers explosion image and subtracts life / ends game
}
}
display();
只需 5 行即可检查所有小行星,即使有 100 个。与物体有关的所有内容都应写入物体本身。在您的代码中,小行星的 x/y 位置保留在主循环中。您可以轻松地将它们转移到对象上。如果您查看上面的两个代码片段,您可以像这样访问小行星 x/y(在播放器类中):
boolean collisionCheck(Asteroid a){
if (x > a.ax && x < a.ax+a.aw && y > a.ay && y < a.ay+a.ah){
return true;
else{
return false;}
希望能帮助到你!
推荐阅读
- javascript - 我如何使用 JS 将图像链接到锚标记?(我正在使用 cloud firestore 工作的功能,管理员的新游戏添加选项)
- java - 减法给出奇怪的结果 [Java]
- asp.net - 无法在 Web api 配置中设置自定义合同解析器
- postgresql - 将 PostgreSQL Alpine 映像切换到 Debian 并从 12.3 升级到 12.6 后出现“信号 11:分段错误”错误
- javascript - 我们应该检查前端 JavaScript 代码的漏洞吗?
- spring-boot - 在 Spring Boot 中使用 Google 登录后重定向到页面用户
- javascript - Node.js 在后端和前端之间共享代码
- go - 我们如何管理 Rest API 查询参数中的“#”
- git - 合并 git 分支时的问题
- python - 如何检查文本文件是否有 Python 中的新内容?