加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用Ruby中的Chipmunk和Gosu绘制一个Polygon

发布时间:2020-12-17 03:00:15 所属栏目:百科 来源:网络整理
导读:我是游戏开发的新手,我认为一起尝试Gosu,Ruby和Chipmunk会很有趣. 到目前为止,我在一个2d Top-Down场上有一名球员和一个球,他们相撞. 我现在的问题是我希望我的玩家成为一个正方形. 我在高中时吮吸过数学课程,这是多年前想到的. Chipmunk的文档说这是关于绘
我是游戏开发的新手,我认为一起尝试Gosu,Ruby和Chipmunk会很有趣.
到目前为止,我在一个2d Top-Down场上有一名球员和一个球,他们相撞.
我现在的问题是我希望我的玩家成为一个正方形.
我在高中时吮吸过数学课程,这是多年前想到的.
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,0))
verts.push(CP::Vec2.new(0,0))

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

这最终给了我一个附加到我的方形png的形状,但看起来好像0,0是图像的左上角,实际的多边形甚至更远到图像的左上角.

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

我相信对于这里的大多数人来说这是基本的.但是在游戏开发方面,我仍处于初级阶段.
有人可以向我解释一下吗?

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

解决方法

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

实际上,你的球是以x,y为中心绘制的,而玩家是在x,y左上角绘制的.再加上你的玩家形状没有以x为中心,y会给你带来困难.

要使播放器的绘图居中,只需使用角度为0的draw_rot方法即可避免旋转图像.

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

要使Chipmunk形状适合居中的玩家图像,您需要将顶点偏移一半大小的形状.你可以硬编码

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))
    ...
  end
end

或者只是在运行时使用

CP::recenter_poly(verts)

在向形状添加顶点之前.

随着这些变化,我怀疑你的物理会表现得更像你期望的那样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读