0. 學(xué)習(xí)來(lái)源
沒(méi)想到教學(xué)視頻就只講到這里,視頻來(lái)源是傳智播客之植物大戰(zhàn)僵尸Android開(kāi)發(fā)教程+課件+源碼
作者是侯哥,非常nice,視頻是很早的,當(dāng)時(shí)還是用Eclipse編寫的,雖然現(xiàn)在是AndroidStudio
1. 碰撞監(jiān)測(cè)
僵尸遇到向日葵和豌豆射手,吃掉對(duì)應(yīng)的植物
2. 思路
僵尸和植物相當(dāng)于2個(gè)矩形相交
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. 開(kāi)發(fā)
讓僵尸進(jìn)行碰撞監(jiān)測(cè),因?yàn)榻┦梢猿韵蛉湛?#xff0c;豌豆射手,省事些,如果想向日葵和豌豆射手監(jiān)測(cè)的話,要寫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);}}
碰撞監(jiān)測(cè)
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
總結(jié)
以上是生活随笔為你收集整理的10 Android 植物人大战僵尸-矩形的碰撞监测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。