日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

10 Android 植物人大战僵尸-矩形的碰撞监测

發(fā)布時(shí)間:2023/12/20 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10 Android 植物人大战僵尸-矩形的碰撞监测 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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è)矩形相交

// 矩形的碰撞監(jiān)測(cè)算法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);// 矩形寬和的一般作為標(biāo)準(zhǔn)線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;}// 僵尸發(fā)起碰撞監(jiān)測(cè)GameView.getInstance().checkCollision(this, raceWay);}}
  • 碰撞監(jiān)測(cè)
  • // 僵尸發(fā)起碰撞監(jiān)測(cè)public void checkCollision(Zombie zombie, int raceWay) {synchronized (mSurfaceHolder) {switch (raceWay) {case 0:for (BaseModel model : gameLayout4plant0) {// 兩個(gè)矩形的碰撞監(jiān)測(cè)if (isCollision(model, zombie)) {if (model instanceof Plant) {// 僵尸碰到植物,則植物死了model.isLive = false;} else {// 子彈射擊僵尸,則僵尸死亡zombie.isLive = false;}}}break;case 1:for (BaseModel model : gameLayout4plant1) {// 兩個(gè)矩形的碰撞監(jiān)測(cè)if (isCollision(model, zombie)) {if (model instanceof Plant) {// 僵尸碰到植物,則植物死了model.isLive = false;} else {// 子彈射擊僵尸,則僵尸死亡zombie.isLive = false;}}}break;case 2:for (BaseModel model : gameLayout4plant2) {// 兩個(gè)矩形的碰撞監(jiān)測(cè)if (isCollision(model, zombie)) {if (model instanceof Plant) {// 僵尸碰到植物,則植物死了model.isLive = false;} else {// 子彈射擊僵尸,則僵尸死亡zombie.isLive = false;}}}break;case 3:for (BaseModel model : gameLayout4plant3) {// 兩個(gè)矩形的碰撞監(jiān)測(cè)if (isCollision(model, zombie)) {if (model instanceof Plant) {// 僵尸碰到植物,則植物死了model.isLive = false;} else {// 子彈射擊僵尸,則僵尸死亡zombie.isLive = false;}}}break;case 4:for (BaseModel model : gameLayout4plant4) {// 兩個(gè)矩形的碰撞監(jiān)測(cè)if (isCollision(model, zombie)) {if (model instanceof Plant) {// 僵尸碰到植物,則植物死了model.isLive = false;} else {// 子彈射擊僵尸,則僵尸死亡zombie.isLive = false;}}}break;default:break;}}}// 矩形的碰撞監(jiān)測(cè)算法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);// 矩形寬和的一般作為標(biāo)準(zhǔn)線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ò),歡迎將生活随笔推薦給好友。