This is what happens in my Tetris game right now:J块的hitbox是60x40,即使实际图像编辑器中没有任何内容,它也被视为一个hitbox . 意思是,J块右上角的两个不可见方块在hitbox中计数,我想要排除它 .
This is the spritesheet seen in the photo editor -- GIMP.
我试图复制并粘贴来自this example的代码,但python立即窃听并说,"No module named math" . 我正在使用python 2.7和pygame 1.9.1 .
我有所有代码的pastebins ... mcve是运行的主要代码 .
`https://pastebin.com/Zze42KmZ`
`https://pastebin.com/q5rEpk3e`
`https://pastebin.com/ChGvrMu8`
`https://pastebin.com/ppb3cREL`
如何排除hitbox中的方块?谢谢你,我为吮吸而道歉 .
1 回答
我不得不争辩说,使用一个'hitbox'作为J元素是不可能的 . 这就是为什么你有pygame检测命中两个不存在的盒子 .
这是为什么?
因为'hitbox'是一个矩形 . 该矩形的高度和宽度与J的元素高度和宽度相匹配 . 该矩形内的所有内容都是同一个“hitbox”的一部分 . 如果代表该元素的图像具有透明部分,则无关紧要 .
Hitbox is not based on image and its transparent parts, it's based on rectangle that surrounds image.
这就是为什么你必须有至少2个矩形覆盖J元素的两个部分,即3个垂直方块和2个水平方块 . 这种情况使整个事情变得复杂一点 . 但是你应该能够使用子
subsurfaces
并对它们使用碰撞检测 .我还认为,为此目的使用pygame的碰撞检测并不好 . 更好的方法是通过使用2D矩阵来实现它,其中存储“O”表示空方块,“X”表示占用的方块 . 在每个步骤中,您的元素都在X,Y坐标处,并且您测试是否将它降低1步,在矩阵中遇到占用的空间 . 这只是一个建议 .
清除5行×4列矩阵的示例:
(1,1)坐标处的J元素示例:
注意pygame的坐标系在屏幕的左上角有(0,0)坐标 . 这与生成的2D矩阵的坐标匹配 .