0. 學習來源
沒想到教學視頻就只講到這里,視頻來源是傳智播客之植物大戰僵尸Android開發教程+課件+源碼
作者是侯哥,非常nice,視頻是很早的,當時還是用Eclipse編寫的,雖然現在是AndroidStudio
1. 碰撞監測
僵尸遇到向日葵和豌豆射手,吃掉對應的植物
2. 思路
僵尸和植物相當于2個矩形相交
private boolean isCollision(BaseModel model1, BaseModel model2) {
boolean result =
false;
int modelMiddleLine1 = model1.locationX + model1.getModelWidth() /
2;
int modelMiddleLine2 = model2.locationX + model2.getModelWidth() /
2;
int diff = Math.abs(modelMiddleLine1 - modelMiddleLine2);
int stander = (model1.getModelWidth() + model2.getModelWidth()) /
2;
if (diff < stander) {result =
true;}
return result;}
3. 開發
讓僵尸進行碰撞監測,因為僵尸可以吃向日葵,豌豆射手,省事些,如果想向日葵和豌豆射手監測的話,要寫2遍
package com.su.botanywarzombies.entity;
/*** 僵尸類*/
public class Zombie extends BaseModel {@Overridepublic void drawSelf(Canvas canvas, Paint paint) {
if (isLive) {canvas.drawBitmap(Config.zombieFlames[farmeIndex], locationX, locationY, paint);farmeIndex = (++farmeIndex) %
7;locationX = locationX - seepX;
if (locationX <
0) {isLive =
false;}GameView.getInstance().checkCollision(
this, raceWay);}}
碰撞監測
public void checkCollision(Zombie zombie,
int raceWay) {
synchronized (mSurfaceHolder) {
switch (raceWay) {
case 0:
for (BaseModel model : gameLayout4plant0) {
if (isCollision(model, zombie)) {
if (model
instanceof Plant) {model.isLive =
false;}
else {zombie.isLive =
false;}}}
break;
case 1:
for (BaseModel model : gameLayout4plant1) {
if (isCollision(model, zombie)) {
if (model
instanceof Plant) {model.isLive =
false;}
else {zombie.isLive =
false;}}}
break;
case 2:
for (BaseModel model : gameLayout4plant2) {
if (isCollision(model, zombie)) {
if (model
instanceof Plant) {model.isLive =
false;}
else {zombie.isLive =
false;}}}
break;
case 3:
for (BaseModel model : gameLayout4plant3) {
if (isCollision(model, zombie)) {
if (model
instanceof Plant) {model.isLive =
false;}
else {zombie.isLive =
false;}}}
break;
case 4:
for (BaseModel model : gameLayout4plant4) {
if (isCollision(model, zombie)) {
if (model
instanceof Plant) {model.isLive =
false;}
else {zombie.isLive =
false;}}}
break;
default:
break;}}}
private boolean isCollision(BaseModel model1, BaseModel model2) {
boolean result =
false;
int modelMiddleLine1 = model1.locationX + model1.getModelWidth() /
2;
int modelMiddleLine2 = model2.locationX + model2.getModelWidth() /
2;
int diff = Math.abs(modelMiddleLine1 - modelMiddleLine2);
int stander = (model1.getModelWidth() + model2.getModelWidth()) /
2;
if (diff < stander) {result =
true;}
return result;}
4. Demo下載
https://github.com/sufadi/BotanyWarZombies
總結
以上是生活随笔為你收集整理的10 Android 植物人大战僵尸-矩形的碰撞监测的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。