You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GameMaker Studio角色角落碰撞异常问题求助

问题分析与修复方案

1. 位运算仅支持2的幂次Tile尺寸

你的代码中使用~(TILE_SIZE-1)的位运算对齐tile坐标,这个操作仅在TILE_SIZE是2的整数次幂(如16、32、64)时有效。如果你的TILE_SIZE设置为非2的幂(比如10、20),对齐逻辑会直接出错,导致角色位置偏移。

修复:

  • 确认TILE_SIZE的值为2的幂,比如改为16;
  • 若必须使用非2的幂的tile尺寸,替换位运算为整数除法:
    将(bbox_right & ~(TILE_SIZE-1))替换为floor(bbox_right / TILE_SIZE) * TILE_SIZE,(bbox_left + TILE_SIZE) & ~(TILE_SIZE-1)替换为ceil(bbox_left / TILE_SIZE) * TILE_SIZE。

2. 左侧/顶部碰撞的坐标对齐逻辑不严谨

你左侧碰撞代码中使用(bbox_left + TILE_SIZE) & ~(TILE_SIZE-1),虽然正数场景下和教程写法结果一致,但负数坐标场景会出现计算偏差。规范写法应先对齐到当前tile起始坐标,再加tile尺寸得到tile边界。

修复左侧碰撞的x赋值代码:

x = ((bbox_left & ~(TILE_SIZE-1)) + TILE_SIZE) - bboxLeftPortion;

修复顶部碰撞的y赋值代码:

y = ((bbox_top & ~(TILE_SIZE-1)) + TILE_SIZE) - bboxTopPortion;

3. bbox偏移量变量定义错误

如果bboxLeftPortion、bboxTopPortion等变量的定义和教程相反(比如教程中是x - bbox_left,你定义成bbox_left - x),会导致坐标计算反向偏移。

验证:

  • 确保bboxLeftPortion = x - bbox_left(角色原点到bbox左边界的距离,正数);
  • 同理,bboxRightPortion = bbox_right - x,bboxTopPortion = y - bbox_top,bboxBottomPortion = bbox_bottom - y。

4. 碰撞图层与Tile属性验证

确认collisionMap是正确的碰撞图层,且参与碰撞的tile索引不为0(代码中通过_pixel1 != 0 || _pixel2 != 0判断碰撞)。


内容的提问来源于stack exchange,提问作者Francesco Riva Reyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:35:24