用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宽度的一半,但这并没有给我正确的结果. 我相信对于这里的大多数人来说这是基本的.但是在游戏开发方面,我仍处于初级阶段. 编辑 解决方法
看起来你的问题源于绘图和碰撞起源之间的不一致.
实际上,你的球是以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) 在向形状添加顶点之前. 随着这些变化,我怀疑你的物理会表现得更像你期望的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |