gpt4 book ai didi

ruby - 在 Ruby 中使用 Chipmunk 和 Gosu 绘制多边形

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:23 26 4
gpt4 key购买 nike

我是游戏开发的新手,我认为一起尝试 Gosu、Ruby 和 Chipmunk 会很有趣。到目前为止,我在 2d 自上而下的 field 上有一名球员和一个球,他们发生了碰撞。我现在的问题是我希望我的播放器是正方形的。
我在高中时数学很烂,那是很多年前的事了。Chipmunk 的文档说明了有关绘制多边形的内容:

# Create a poly collision shape attached to the given body at
# the given offset with the given vertexes. _verts_ must be an
# Array of CP::Vect with a counterclockwise winding.
def initialize(body, verts, offset); end

我现在有这段代码来获取我的多边形:

verts = Array.new
verts.push(CP::Vec2.new(0,32))
verts.push(CP::Vec2.new(32,32))
verts.push(CP::Vec2.new(32,0))
verts.push(CP::Vec2.new(0,0))

@shape = CP::Shape::Poly.new(@body, verts, CP::Vec2.new(0,0))

这最终给了我一个附加到我的方形 png 的形状,但它看起来好像 0,0 是图像的左上角,而实际的多边形甚至从图像的左上角开始。

所以我假设我应该将“偏移量”设置为我的多边形宽度的一半,但这并没有给我正确的结果。

我敢肯定,对于这里的大多数人来说,这是基础知识。但在游戏开发方面,我仍然处于初级阶段。
有人可以向我解释一下吗?

编辑
Here是我截至 2011 年 5 月 28 日的完整代码

最佳答案

看起来您的问题源于绘图和碰撞源之间的不一致。

实际上,您的球是以 x,y 为中心绘制的,而玩家是以左上角在 x,y 上绘制的。再加上您的 Player 形状不以 x,y 为中心,这给您带来了困难。

要使玩家的绘图居中,只需使用角度为 0 的 draw_rot 方法即可避免旋转图像。

class Player
def draw
@image.draw_rot(@shape.body.pos.x, @shape.body.pos.y, 1, 0, 0.5, 0.5, 1, 1)
end
end

要使花栗鼠形状适合居中的玩家图像,您需要将顶点偏移形状大小的一半。您可以对此进行硬编码

class Player
def initialize(space, image)
...
verts = Array.new
verts.push(CP::Vec2.new(-16,16))
verts.push(CP::Vec2.new(16,16))
verts.push(CP::Vec2.new(16,-16))
verts.push(CP::Vec2.new(-16,16))
...
end
end

或者只是在运行时使用

CP::recenter_poly(verts)

在向形状添加 verts 之前。

有了这些更改,我怀疑您的物理行为会更像您预期的那样。

关于ruby - 在 Ruby 中使用 Chipmunk 和 Gosu 绘制多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com