javascript - Sprite 碰撞的单元格中心

标签 javascript html5-canvas

我正在使用 Canvas 在 JavaScript 中开发游戏。相关 Sprite 水平或垂直移动(但不能同时移动)。游戏区域被划分为 16 x16 像素单元(与 Sprite 大小相同)以进行碰撞。我从左上角(不是中心)绘制 Sprite 。我已经弄清楚如何检测 Sprite 是否跨越了新单元格。

var modX = sprite.x % 16;
var modY = sprite.y % 16; 
if (modX == 0 && modY == 0) 
{
    // Sprite has entered new cell. Do appropriate functions
}

我现在需要计算出 Sprite 何时位于单元格中间,这让我有点头痛,因为它与上面的不一样并添加了半个单元格宽度....我希望有人也许可以帮助解决一些伪代码。 请记住:我是一名艺术家,试图使用 javascript 来提高自己 - 所以请对我宽容一点,好吗。

最佳答案

你已经非常接近了,位于单元格中间仅意味着余数为 7:

var modX = sprite.x % 16;
var modY = sprite.y % 16; 
if (modX == 7 || modY == 7) 
{
   // in the middle of a cell 
}

但如果可以的话,可能有两件事需要改变:
1- 处理网格偏移,以便您可以决定游戏布局。
2-记住你刚来到的牢房中心不要做两次事情

// somewhere in the init of the game ...//
var gridX = 0, gridY = 0;
var lastCenterCol = -1, lastCenterRow = -1;

// in your game loop //
var modX   = (sprite.x - gridX )% 16;
var modY   = (sprite.y - gridY )% 16;
var column = (sprite.x - gridX  - modX) / 16;
var row    = (sprite.y- gridY - modY) / 16;

if ( (column!=lastCenterCol) && (row!=lastCenterRow) &&  ( (modX == 7) || (modY == 7) ) ) 
{
  lastCenterCol=column;
  lastCenterRow=row;
  // Sprite just entered this cell center.
 }

关于javascript - Sprite 碰撞的单元格中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338268/

相关文章:

javascript - 使用斐波那契格子在球体上均匀排列点

javascript - 在字符前提取 iframe src

javascript - jQuery 帖子中的错误 : Could not convert JavaScript argument

javascript - 如何调整动画上的div位置

javascript - Canvas 世界到屏幕的卡顿

javascript - 如何获取canvas中图像的Id

javascript - 如何使用cheerio从这个html中获取图像src、标题和描述?

javascript - 迭代无限嵌套的 json 结构

javascript - 如何为 javascript 弹跳球创建可调整大小的 html5 Canvas ?

javascript - 将图像上传到 Canvas 上