首页 文章

pygame俄罗斯方块的自定义矩形命中箱?第2部分

提问于
浏览
0

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 回答

  • 0

    我不得不争辩说,使用一个'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列矩阵的示例:

    0 0 0 0
    0 0 0 0
    0 0 0 0
    0 0 0 0
    0 0 0 0
    

    (1,1)坐标处的J元素示例:

    0 0 0 0
    0 0 J 0
    0 0 J 0
    0 J J 0
    0 0 0 0
    

    注意pygame的坐标系在屏幕的左上角有(0,0)坐标 . 这与生成的2D矩阵的坐标匹配 .

相关问题