【发布时间】:2014-06-21 09:34:01
【问题描述】:
我在玩rogue-like,我已经设法在播放器上实现了一个摄像头,摄像头只显示玩家周围的环境,并且固定在窗户的一侧。
问题是,当玩家靠近地图的两侧时,表面会出现黑色空间。 像这样:
如何让相机“卡”到一边而不进一步?
绘制地图
- 我采用了相机矩形位置 [topleft 和 bottomright];
- 将其转换为世界位置;
- 使用枚举器对其进行迭代;
- 是否使用 X 和 Y 进行任何点亮/访问 FOG 计算;
- 并使用枚举器“i”和“j”在屏幕中显示。
代码如下:
topleft = Map.toWorld(camera.rect.topleft)
bottomright = Map.toWorld(camera.rect.bottomright)
for i, x in enumerate(xrange(topleft[0], bottomright[0])):
for j, y in enumerate(xrange(topleft[1], bottomright[1])):
tile = mymap.tileAt(x, y)
object = [obj for obj in Object.OBJECTS if obj.pos == (x,y)]
if tile:
lit = field_of_view.lit(x, y)
visited = field_of_view.visited(x, y)
graphic = tile.graphic
if lit:
color = tile.color
elif visited:
color = GRAY
else:
color = BLACK
renderedgraphic = myfont.render(ch, 1, graphic)
screen.blit(renderedgraphic, Map.toScreen((i + 1, j)))
if object:
Draw.drawObject(object[0], Map.toScreen((i + 1, j)))
我整天都在为这个问题苦苦挣扎,这就是我得到的进一步。
我看到了 HERE 的一个例子,但我无法将代码调整到我的游戏中,因为它使用了精灵。
【问题讨论】:
-
如果您没有得到任何答案,请尝试将其发送到 gamedev.stackexchange.com。
-
话虽如此,解决方案将涉及检查移动相机是否会导致 4 侧中任何一侧的屏幕边缘超出地图边缘,如果出现这种情况则不要移动它是这样的。
-
我喜欢 pygame,但它有很多问题,我建议你看看 PyOpenGL,PyOpenGL 激活你的 GPU 并且与 pygame 相比快如闪电。使用 PyOpenGL,您可以绘制整个世界,只需根据需要定位相机,无需部分渲染,并且在 2D 中它很简单。 greendalecs.wordpress.com/2012/04/21/… 我知道这不是真正的答案,但从长远来看...PyOpenGL 是最好的。