你现在知道如何制作各种各样的图形对象,但你能用他们做什么?一个有趣的事情是构建一个简单的碰撞检测系统。你可以使用一个自定义函数 hitTestRectangle来检查任何两个矩形Pixi sprites是否接触。
hitTestRectangle(spriteOne, spriteTwo)
如果它们重叠,hitTestRectangle将返回true。您可以使用hitTestRectangle与if语句来检查两个精灵这样的之间的冲突:
if (hitTestRectangle(cat, box)) {
//There's a collision
} else {
//There's no collision
}
正如你将看到的,hitTestRectangle是进入庞大宇宙的游戏设计的前门。
在collisionDetection.html文件examples夹中运行该文件,获取如何使用的工作示例hitTestRectangle。使用箭头键移动猫。如果猫碰到盒子,盒子变红,“打!由文本对象显示。
你已经看到了创建所有这些元素的所有代码,以及使猫移动的键盘控制系统。唯一新的东西是在函数hitTestRectangle内部使用的方式play来检查冲突。
function play() {
//use the cat's velocity to make it move
cat.x += cat.vx;
cat.y += cat.vy;
//check for a collision between the cat and the box
if (hitTestRectangle(cat, box)) {
//if there's a collision, change the message text
//and tint the box red
message.text = "hit!";
box.tint = 0xff3300;
} else {
//if there's no collision, reset the message
//text and the box's color
message.text = "No collision...";
box.tint = 0xccff99;
}
}
因为该play函数每秒由游戏循环调用60次,所以这个if语句不断地检查cat和box之间的冲突。如果hitTestRectangle是true,文本message对象用于setText显示“Hit”:
message.text = "hit!";
然后通过将框的tint属性设置为十六进制红色值,将框的颜色从绿色更改为红色。
box.tint = 0xff3300;
如果没有冲突,消息和框保持在其原始状态:
message.text = "no collision...";
box.tint = 0xccff99;
这段代码很简单,但是突然间,你创建了一个似乎完全活跃的互动世界。它几乎像魔术!也许,令人惊讶的是,你现在有所有你需要的技能开始制作游戏与Pixi!
hitTestRectangle函数
但是hitTestRectangle功能怎么样?它做什么,它是如何工作的?关于如何工作的碰撞检测算法的细节略微超出了本教程的范围。最重要的是你知道如何使用它。但是,仅供参考,如果你好奇,这里是完整的 hitTestRectangle函数定义。你能从评论中知道它在做什么吗?
function hitTestRectangle(r1, r2) {
//Define the variables we'll need to calculate
var hit, combinedHalfWidths, combinedHalfHeights, vx, vy;
//hit will determine whether there's a collision
hit = false;
//Find the center points of each sprite
r1.centerX = r1.x + r1.width / 2;
r1.centerY = r1.y + r1.height / 2;
r2.centerX = r2.x + r2.width / 2;
r2.centerY = r2.y + r2.height / 2;
//Find the half-widths and half-heights of each sprite
r1.halfWidth = r1.width / 2;
r1.halfHeight = r1.height / 2;
r2.halfWidth = r2.width / 2;
r2.halfHeight = r2.height / 2;
//Calculate the distance vector between the sprites
vx = r1.centerX - r2.centerX;
vy = r1.centerY - r2.centerY;
//Figure out the combined half-widths and half-heights
combinedHalfWidths = r1.halfWidth + r2.halfWidth;
combinedHalfHeights = r1.halfHeight + r2.halfHeight;
//Check for a collision on the x axis
if (Math.abs(vx) < combinedHalfWidths) {
//A collision might be occuring. Check for a collision on the y axis
if (Math.abs(vy) < combinedHalfHeights) {
//There's definitely a collision happening
hit = true;
} else {
//There's no collision on the y axis
hit = false;
}
} else {
//There's no collision on the x axis
hit = false;
}
//`hit` will be either `true` or `false`
return hit;
};
- 大小: 16.8 KB
分享到:
相关推荐
6. **自定义滤镜**:Pixi-filters还允许开发者创建自己的滤镜,通过定义着色器代码实现特定的图形处理效果。 在实际项目中,pixi-filters可以帮助前端开发者轻松实现各种视觉特效,提升用户体验。同时,由于其高效...
pixi-multistyle-text 添加MultiStyleText对象内部使用不同的风格很容易地创建文本。 例子 在下面的示例中,我们定义了4种文本样式。 default是文本的默认样式,其他样式与文本内的标签匹配。 let text = new ...
《整合PIXI与PIXI-SPINE于Vue.js:实现高效动画渲染》 在现代Web开发中,Vue.js因其易用性和灵活性而受到广大开发者喜爱。同时,对于2D游戏和交互式应用,PIXI.js库以其强大的图形处理能力成为首选。而PIXI-SPINE...
pixi-spine, 支持脊椎支持的Pixi.js 插件 pixi脊椎 pixi v3和 pixi v4的脊椎实现。用法预生成的文件如果只包含生成的文件,pixi脊椎将自身添加到pixi命名空间中:new PIXI.spine.Spine();基本示例var app
pixi-movieclip-speed 根据当前浏览器的fps速率动态调整PIXI movieclip的动画速度。 当PIXI movieclip动画速度设置在0到1之间时,假定您的浏览器始终以60fps运行。 想象一下,精灵表格动画以24fps导出并且动画速度...
Pixi-Pan-and-Zoom 这是什么: 关于如何在 PixiJS 中实现平移和缩放的快速且有些简洁的示例 建立在这些想法的基础上并使示例更好的好地方 旨在帮助从 KineticJS 迁移到 PixiJS,为 这不是什么: 没有依赖管理。 ...
筛选预习调整滤镜@ pixi / filter-adjustment AdvancedBloomFilter @ pixi / filter-advanced-bloom AsciiFilter @ pixi / filter-ascii 斜角过滤器@ pixi / filter-bevel BloomFilter @ pixi / filter-bloom ...
pixi v5的压缩纹理和视网膜支持。 加载程序可以根据平台和渲染模式选择纹理。 您可以将早期版本与PixiJS v4一起使用-v4.xnpm版本1.1.8 支持DDS(S3TC DXT1-3-5,ATC,ATCA / ATC显式,ATCI / ATC内插),PVR...
将缩小的文件安装到node_modules/pixi-after-effects/dist/pixi-ae.js 演示 参见 或按照以下步骤运行计算机 yarn install # install dependencies yarn server # start simply server by webpack-dev-server ...
从pixi-viewport v3迁移到v4 视口需要导入或要求如下: import { Viewport } from 'pixi-viewport'// orconst Viewport = require ( 'pixi-viewport' ) . Viewport 插件已移至其自己的对象: // viewport....
pixi-live2d-display v5的Live2D集成。 该项目旨在成为Web平台上的通用Live2D框架。 尽管正式的Live2D框架非常复杂且有问题,但该项目已对其进行了重写,以统一和简化API,这使您无需了解内部系统的工作原理就可以在...
pixi-typescript-样板 带有初学者友好模板 强调 :Japanese_symbol_for_beginner: - 初学者友好。 :hammer_and_wrench: - 打字稿 + 巴别塔。 :airplane: - 实时重新加载。 :rocket: - 极快的捆绑时间 :memo: - ...
pixi-rich-text 在添加RichText对象,以使用不同的样式轻松创建文本。 受到原始启发 建筑学 RichText允许您以多种样式和嵌入的图像来控制文本,就好像它是单个Pixi组件一样。 它的灵感来自但结构上却大不相同。 ...
pixi-inspector, Pixi.js的Chrome 开发人员工具 Pixi检查器用于检查 Pixi.js 游戏/应用程序的Chrome DevTools的扩展。安装安装( Chrome 网络存储中的Pixi检查器) [ https://chrome.google.com/webstore/deta
元素,根据PIXI-DisplayObject给出的转换,该元素位于舞台的上方。 该框在PIXI平台上绘制。 此外,您可以选择当文本字段没有焦点时,插件是否应使用本机pixi-Text替换<input> 。 演示版 正在安装 在dist/PIXI....
pixi型脚本样板带有初学者友好模板强调 :Japanese_symbol_for_beginner: -初学者友好。...用法单击仓库上方的绿色按钮“使用此模板”,或只需复制粘贴并开始编码git clone --depth=1 --branch=master ...
在“pixi.js-practice”项目中,你可能会学习如何将这些物理引擎引入到游戏中,模拟真实世界的碰撞检测和物理行为。 最后,游戏状态管理是另一个重要话题。项目可能包含了如何组织游戏的多个状态(如主菜单、游戏...
CustomPIXIParticlesEditor由 自定义PIXI粒子编辑器。 编辑器: 如何使用: npm install custom-pixi-particles-editor然后: npm starthttp://localhost:12345/
pixi-nwjs-启动器使用pixiJS v5和适用于桌面x64的Node-Webkit SDK的示例应用程序。特征包括基本的package.json + jsconfig.json + index.html + launch.json 。 Node和v8包含在引擎中,无需依赖。 使用PIXIv5的基本...