我在做一个流氓,我试着让一个摄像头跟踪玩家在地图上移动。在
我可以使绘制功能只在平铺在摄影机视口内[以灰色显示]时发生,但我不能使摄影机停留在窗口的一角。在
事情是这样的:
应该是这样的:
有没有一种方法可以“裁剪”屏幕表面,或者只复制相机视口内的内容,然后再在屏幕上快速播放。在
可能我做得很辛苦。 我在整个地图上迭代,为每个平铺创建一个矩形,并使用“.contains()”检查它是否在摄影机视口矩形内。在
编辑: 我是这样画地图的:
for x in xrange(mymap.width):
for y in xrange(mymap.height):
lit = field_of_view.lit(x, y)
visited = field_of_view.visited(x, y)
graphic = mymap.tileAt(x, y).graphic
if lit:
color = mymap.tileAt(x, y).color
elif visited:
color = GRAY
else:
color = BLACK
renderedgraphic = myfont.render(graphic, 1, color)
screen.blit(renderedgraphic, (x*TILESIZE, y*TILESIZE))
我对玩家,怪物,物品等等做同样的事情,但是所有的东西都是用它自己的类方法。在
我的相机是这样设置的:
^{pr2}$所以我尝试了用户3762084所说的。在
简而言之:
for x in xrange(mymap.width):
for y in xrange(mymap.height):
... # do fov stuff
tile = Tile.At(x, y) # get tile instance
if tile:
tile.update() # update it's relative position
screen.blit(renderedgraphic, (tile.relX * TILESIZE, tile.relX * TILESIZE)) # blit the postion to it's relative position
发生的情况如下:
全都挤在窗边了。如果玩家移动,一切都会变黑。在
我以前做过的创建滚动环境的方法是给每个对象在世界上的坐标,然后给你的相机一个位置。绘图时,根据对象的实际坐标和相机的坐标计算每个对象在屏幕上的位置。在
此外,还可以执行检查,以查看平铺是否完全位于摄影机空间之外,并且不绘制这些平铺。在
好吧,我找到了我要找的东西,我做了一点小改动。如果有人想更好的话。在
我改变了地图的绘制方式
代码如下:
现在唯一的问题是当玩家在地图的两侧时,它会显示一个黑色的边界。在
相关问题 更多 >
编程相关推荐