pygame显示图片

import pygame,sys#加载模块
import show_hero
def main():
	pygame.init()#初始化pygame模块
	screen = pygame.display.set_mode((800,600))#创建一个100*100的窗口
	show_hero.show_hero(screen)
	while True:#因为窗口一闪就消失了,需要一个无限循环,让程序持续运行。
		pygame.display.update()#刷新屏幕
		for event in pygame.event.get():#游戏窗口不能正常关闭,加一个获取事件
			if event.type == pygame.QUIT:#检测事件类型是关闭游戏
				sys.exit()#pygame的正常关闭游戏方法,需要加载sys模块配合

main()
	
"""
为了显示图片,这四行代码是必须的。
screen_rect = screen.get_rect()
hero = pygame.image.load('wugui.bmp')
hero_rect = hero.get_rect()
screen.blit(hero,hero_rect)
但是他们破坏了代码的可读性。这时,一个方法就可以解决这样的可读性问题。
def show_hero(screen):
	screen_rect = screen.get_rect()
	hero = pygame.image.load('wugui.bmp')
	hero_rect = hero.get_rect()
	screen.blit(hero,hero_rect)
pygame.init()#初始化pygame模块
screen = pygame.display.set_mode((800,600))#创建一个100*100的窗口
show_hero(screen)
糟糕,方法的定义必须先于你使用它前,可是这样写,就难看多了,如何把方法的定义挪开呢?
放到下面就行,不过必须主程序用方法圈起来,这样,代码在执行时会先按顺序读方法的定义,
然后你只需要在定义下面调用方法就好。
def main():
	pygame.init()#初始化pygame模块
	screen = pygame.display.set_mode((800,600))#创建一个100*100的窗口
	show_hero(screen)
	while True:#因为窗口一闪就消失了,需要一个无限循环,让程序持续运行。
		pygame.display.update()#刷新屏幕
		for event in pygame.event.get():#游戏窗口不能正常关闭,加一个获取事件
			if event.type == pygame.QUIT:#检测事件类型是关闭游戏
				sys.exit()#pygame的正常关闭游戏方法,需要加载sys模块配合

def show_hero(screen):
	screen_rect = screen.get_rect()
	hero = pygame.image.load('wugui.bmp')
	hero_rect = hero.get_rect()
	screen.blit(hero,hero_rect)
main()
另一种方法就是另建一个文件,里面放入你的方法,然后在加载模块时加载进来,就可以直接调用
了。
import show_hero
def main():
	pygame.init()#初始化pygame模块
	screen = pygame.display.set_mode((800,600))#创建一个100*100的窗口
	show_hero.show_hero(screen)
	while True:#因为窗口一闪就消失了,需要一个无限循环,让程序持续运行。
		pygame.display.update()#刷新屏幕
		for event in pygame.event.get():#游戏窗口不能正常关闭,加一个获取事件
			if event.type == pygame.QUIT:#检测事件类型是关闭游戏
				sys.exit()#pygame的正常关闭游戏方法,需要加载sys模块配合

main()
这样看着又简洁了。
然后就是发现,游戏不就是一些图片,声音的组合么,图片的出现方式,位置,渲染就是新的问题
了。
比如角色的显示方式,有几张图片,什么时候显示。再细分,站立时的动作,跑步的动作,打的动作,
说话的动作等等。每个动作就是一组图片,或者几组图片。比如站立时,有时会挖痒痒,有时会打哈
欠等。可以通过一个像是指南针一样的随机数组指定播放那段动画。还有动画就是显示图片时以特定
的频率刷新,轮番显示,就是动画了。
再比如3D效果的实现,那个《DOOM》的作者约翰卡马克发明的透视学。好难,灭点是什么??
参考资料:
www.giantbomb.com/john-carmack/3040-4576/images/gamerant.com/doom-creator-john-carmack-trivia/

https://archive.org/details/NextGeneration30Jun1997/page/n13/mode/2up?view=theaterwww.flickr.com/photos/jurvetson/280366436www.1k3c.com/about-my-games.html 
资料
https://www.youtube.com/watch?v=eOCQfxRQ2pY
Wolfenstein 3D's map renderer
《DOOM启世录》
还有如果点击移动按钮,并使人物保持在中心,那地图就得向相反方向移动。并且景物应该与地图同
时移动,可以把他们编到一个组里,一起移动。如果是无限地图,那就涉及到什么时候加载新地图。
"""

这是程序的运行结果

这是我听说游戏3D效果实现的地方。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值