为了账号安全,请及时绑定邮箱和手机立即绑定

在电子游戏中将滚动添加到血小板中。

在电子游戏中将滚动添加到血小板中。

斯蒂芬大帝 2019-07-10 15:27:44
在电子游戏中将滚动添加到血小板中。好的,我在下面列出了我的项目的代码,我只是在做一些关于制作一个平台的玩玩游戏的实验。我试图弄清楚如何做一些非常简单的滚动跟随玩家,所以播放器是相机的中心,它反弹/跟随他。有谁可以帮我?import pygamefrom pygame import *WIN_WIDTH = 800WIN_HEIGHT = 640HALF_WIDTH = int(WIN_WIDTH / 2)HALF_HEIGHT = int(WIN_HEIGHT / 2) DISPLAY = (WIN_WIDTH, WIN_HEIGHT)DEPTH = 32FLAGS = 0CAMERA_SLACK = 30def main():     global cameraX, cameraY     pygame.init()     screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)     pygame.display.set_caption("Use arrows to move!")     timer = pygame.time.Clock()     up = down = left = right = running = False     bg = Surface((32,32))     bg.convert()     bg.fill(Color("#000000"))     entities = pygame.sprite.Group()     player = Player(32, 32)     platforms = []     x = y = 0     level = [         "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",         "P                                P",         "P                                P",         "P                                P",         "P                                P",         "P                                P",         "P                                P",         "P                                P",         "P       PPPPPPPPPPP              P",         "P                                P",         "P                                P",         "P                                P",         "P                                P",         "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]     # build the level     for row in level:         for col in row:             if col == "P":                 p = Platform(x, y)                 platforms.append(p)                 entities.add(p)             if col == "E":                 e = ExitBlock(x, y)                 platforms.append(e)                 entities.add(e)             x += 32         y += 32         x = 0     entities.add(player)     while 1:         timer.tick(60)
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

因为正确的知道,你有一个静态的背景,和你控制的球员,是闪现在他的位置,你有两个选项,始终显示字符在中间。

  1. 如果你的地图是小的,你可以有一个大的IMG A,并得到一个矩形,根据播放器的位置,将是屏幕的大小。这样,球员将永远处于中间。Rect.钳(RECT)或Rect.钳_IP(RECT)将在这方面帮助您。

  2. 另一种方法是为屏幕上的位置设置一个不同的元组。播放器将在屏幕中心有一个恒定的值,而背景位置将是播放器位置的负值。


查看完整回答
反对 回复 2019-07-10
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

唯一的方法是将地图中的逻辑位置与屏幕上的物理位置分开。

任何与实际在屏幕上绘制地图相关的代码-在您的例子中,所有的.rect你的精灵属性-必须这样做,根据一个偏移的部分,你的屏幕是实际使用的地图。

例如,您的屏幕可能会显示您的地图,从左上角的位置(10,10)开始-所有这些都显示相关代码(在上面的例子中,这些代码是.rect属性)应该从当前逻辑位置减去屏幕偏移量-(假设字符位于地图共弦处(12,15),因此,在上面的示例中,应该以(12,15)-(10,10)->(2,5)*块_size绘制它,在上面的示例中,块_size被硬编码为32,32,所以您希望在显示的物理像素位置(2*32,5*32)绘制它)。

(提示:避免用这种方式硬编码,在代码开始时将其作为常量声明)


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 436 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信