From d09a6719d7292ac5e256de23284886351952fb22 Mon Sep 17 00:00:00 2001 From: bingor Date: Wed, 12 Oct 2022 11:27:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9D=A6=E5=85=8B=E5=A4=A7=E6=88=98=EF=BC=88?= =?UTF-8?q?=E4=B8=80=E6=9C=9F=EF=BC=89-=E8=AE=BE=E8=AE=A1=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F-=E8=B4=A3=E4=BB=BB=E9=93=BE=E5=BA=94=E7=94=A81.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/msb/chain/ColliderChain.java | 8 +++++--- src/main/java/com/msb/inter/Collider.java | 2 +- src/main/java/com/msb/inter/impl/BulletTankCollider.java | 9 +++++---- src/main/java/com/msb/inter/impl/TankTankCollider.java | 5 +++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/msb/chain/ColliderChain.java b/src/main/java/com/msb/chain/ColliderChain.java index 1e22be9..693063f 100644 --- a/src/main/java/com/msb/chain/ColliderChain.java +++ b/src/main/java/com/msb/chain/ColliderChain.java @@ -20,7 +20,7 @@ import java.util.List; *@Date 2022/10/11 17:55 *@Version 3.0 */ -public class ColliderChain { +public class ColliderChain implements Collider { List colliders = new LinkedList<>(); public ColliderChain() { @@ -36,9 +36,11 @@ public class ColliderChain { return colliders; } - public void collide(GameObject o1, GameObject o2) { + @Override + public boolean collide(GameObject o1, GameObject o2) { for (Collider collider : colliders) { - collider.collide(o1, o2); + if( ! collider.collide(o1, o2)) return false; } + return true; } } diff --git a/src/main/java/com/msb/inter/Collider.java b/src/main/java/com/msb/inter/Collider.java index 1929f64..e635873 100644 --- a/src/main/java/com/msb/inter/Collider.java +++ b/src/main/java/com/msb/inter/Collider.java @@ -9,5 +9,5 @@ import com.msb.model.abstracts.GameObject; * @Version: 1.0 */ public interface Collider { - public void collide(GameObject o1, GameObject o2); + public boolean collide(GameObject o1, GameObject o2); } diff --git a/src/main/java/com/msb/inter/impl/BulletTankCollider.java b/src/main/java/com/msb/inter/impl/BulletTankCollider.java index 6b1d087..aae0960 100644 --- a/src/main/java/com/msb/inter/impl/BulletTankCollider.java +++ b/src/main/java/com/msb/inter/impl/BulletTankCollider.java @@ -19,20 +19,21 @@ import com.msb.model.abstracts.GameObject; */ public class BulletTankCollider implements Collider { @Override - public void collide(GameObject o1, GameObject o2) { + public boolean collide(GameObject o1, GameObject o2) { if(o1 instanceof Bullet && o2 instanceof Tank) { Bullet bullet = (Bullet) o1; Tank tank = (Tank) o2; - if(bullet.getGroup() == tank.getGroup()) return; + if(bullet.getGroup() == tank.getGroup()) return true; //没有撞继续执行 if(bullet.getRectangle().intersects(tank.getRectangle())) { bullet.die(); tank.die(); } + return false; //撞上就不再向下执行了 } else if (o1 instanceof Tank && o2 instanceof Bullet) { - collide(o2, o1); + return collide(o2, o1); } else { - return; + return true; } } } diff --git a/src/main/java/com/msb/inter/impl/TankTankCollider.java b/src/main/java/com/msb/inter/impl/TankTankCollider.java index 5479399..c0beb9a 100644 --- a/src/main/java/com/msb/inter/impl/TankTankCollider.java +++ b/src/main/java/com/msb/inter/impl/TankTankCollider.java @@ -18,7 +18,7 @@ import com.msb.model.abstracts.GameObject; */ public class TankTankCollider implements Collider { @Override - public void collide(GameObject o1, GameObject o2) { + public boolean collide(GameObject o1, GameObject o2) { if(o1 instanceof Tank && o2 instanceof Tank) { Tank tank1 = (Tank) o1; Tank tank2 = (Tank) o2; @@ -26,8 +26,9 @@ public class TankTankCollider implements Collider { tank1.goBack(); tank2.goBack(); } + return true; //坦克与坦克相撞,坦克不会消失,所以责任链应该继续 } else { - return; + return true; } } }