讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在子弹击中敌人时移除敌人并更新得分

酷伟吖_1520

酷伟吖_1520

发布时间:2026-01-02 15:40:03

|

243人浏览过

|

来源于php中文网

原创

如何在子弹击中敌人时移除敌人并更新得分

本教程详解如何在processing游戏中实现子弹与敌人的碰撞检测、敌人销毁及得分更新,通过状态标记法安全移除对象,避免遍历集合时的并发修改问题。

在基于Processing的2D射击游戏中,实现“子弹击中即消灭敌人并加分”是核心交互逻辑。但直接在checkCollision()中删除Enemy对象极易引发运行时错误(如ConcurrentModificationException),尤其当敌人存储在ArrayList<Enemy>中并在主循环中遍历渲染时。正确做法是分离“检测”与“清理”逻辑:先标记敌人状态,再统一处理。

游戏开发助手专业版
游戏开发助手专业版

企业级游戏开发平台,支持团队协作、资产管理、数据分析与商业化

下载

✅ 正确实现步骤

1. 为 Enemy 类添加存活状态字段

class Enemy {
  int x, y;
  float size;     // 推荐用 size 表示半径或直径,比直接用 x/y 更语义清晰
  boolean alive = true;  // 关键:默认存活

  Enemy(int x, int y, float size) {
    this.x = x;
    this.y = y;
    this.size = size;
  }
}

2. 修正 Bullet.checkCollision():仅标记,不删除

void checkCollision(Enemy e) {
  float distance = dist(bulletX, bulletY, e.x, e.y);
  // ✅ 修正:使用 e.size 作为碰撞半径(假设 size 是直径,则半径为 size/2)
  if (distance < e.size / 2) { 
    e.alive = false;  // 标记为死亡,不在此处移除!
    score++;          // 同步增加玩家得分(需确保 score 是 Bullet 实例变量或全局变量)
  }
}
⚠️ 注意:原代码中 distance < e.x / 2 是错误的——e.x 是横坐标,不是尺寸!务必改用 e.size(或 e.radius)。

3. 在主游戏循环中统一清理与渲染

// 假设 enemies 是 ArrayList<Enemy>,bullets 是 ArrayList<Bullet>
void draw() {
  // 更新并检查所有子弹与所有敌人碰撞
  for (Bullet b : bullets) {
    b.update();
    for (Enemy e : enemies) {
      b.checkCollision(e); // 此处只标记 e.alive = false
    }
  }

  // 渲染:只画存活的敌人和子弹
  for (Enemy e : enemies) {
    if (e.alive) {
      image(EnemyImg, e.x, e.y);
    }
  }
  for (Bullet b : bullets) {
    b.show();
  }

  // 【关键】清理死亡敌人(倒序遍历,避免索引错位)
  for (int i = enemies.size() - 1; i >= 0; i--) {
    if (!enemies.get(i).alive) {
      enemies.remove(i); // 安全移除
    }
  }

  // 可选:清理飞出屏幕的子弹
  for (int i = bullets.size() - 1; i >= 0; i--) {
    if (bullets.get(i).offScreen()) {
      bullets.remove(i);
    }
  }
}

? 进阶建议

  • 性能优化:若敌人数量多,可引入空间分区(如四叉树)减少每帧碰撞检测次数。
  • 视觉反馈:在 e.alive = false 后播放爆炸动画或音效,再延迟移除(需额外计时器)。
  • 得分同步:若 score 是全局变量,建议封装为 GameStats 类管理,提升可维护性。

通过“标记-清除”两阶段设计,你既能保证逻辑清晰、线程安全(单线程下无竞态),又能避免因误删对象导致的崩溃。这是游戏开发中处理动态对象生命周期的经典范式。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

3605

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

1470

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

179

2026.03.17

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3438

2023.08.10

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

13233

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

373

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

268

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

263

2026.03.06

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
阶跃Al官方手册
阶跃Al官方手册

共0课时 | 0人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

C++教程
C++教程

共115课时 | 41.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn