import pygame from sys import exit from math import pi pygame.init() #初始化pygame screen = pygame.display.set_mode((400,250)) #dispaly模块 #set.mode()方法,设定窗口显示大小,参数为元组 #用变量保存 #设置背景填充颜色 """ 参数:R,G,B,A (0~255 || 0~100) 白色:(255,255,255) 黑色:(0,0,0) """ screen.fill((255,255,255)) image = pygame.image.load('image.png').convert_alpha() # image模块,加载图片->load(source)方法 print(image.get_size() #get_size()方法,得到图片大小 # image = pygame.transform.scale() ??? image = pygame.transform.rotozoom(image,90,0.1) # trasnform模块-->变形 # rotozoom方法(source,旋转角度(数值),缩放比例) screen.blit(image,(0,0)) # blit(object,pos)对象方法,数位传送 # font = pygame.font.SysFont('SimHei',30,False,True) # font模块 # 系统字体,不支持中文,SysFont() font = pygame.font.Font('maobi.ttf',20) # 自定义字体方法,Font(source,size) screen.blit(font.render('你说什么?')) # 参数?? ??? pygame.display.flip() # display模块,flip()方法,全部刷新 fs = pygame.font.get_fonts() for i in fs: print(i) # ??? while True: # 死循环,让窗口一直存在,并保持这一状态 for event in pygame.event.get(): # 遍历捕捉事件 # event模块,get()捕获事件 if event.type == pygame.QUIT: exit() if event.type == pygame.KEYDOWN: pass # 但当所有事件都捕获完成,没有事件可在捕捉的时候,它会又返回到最上层,继续捕获,没错,它会存储,并产生节点
import pygame from sys import exit pygame.init() screen = pygame.display.set_mode((400,200),pygame.RESIZABLE) # 可拉伸大小 # pygame.display.set_caption() # 设定题目 w = screen.get_width() # 获得宽度 h = screen.get_height() # 获取高度 screen.fill((255,0,0)) # 对象方法,屏幕填充rgb pygame.display.flip() # display整个窗口渲染 running = True while running: # event = pygame.event.wait() # if event.type == pygame.MOUSEBUTTONDOWN: # print('MouseButtonDown!') # # 与for循环写出来的有何区别? 不能处理并发事件 ????? # 但可以用逻辑运算符写出来啊? for event in pygame.event.get(): #clear()? if event.type == pygame.QUIT: exit() if event.type == pygame.MOUSEBUTTONDOWN: print("MOUSEBUTTONDOWN") pos = event.pos # 获取鼠标位置 print(pos) if event.type == pygame.MOUSEMOTION: print('!!!') pos = event.pos print(pos) #Unicode = ASCII码 + 万国码,包含关系 if event.type == pygame.KEYUP: # 按键弹起 print('UP!') key = event.key #event.key使用ASCII码直接表示的 print(chr(key)) # 编码转换 ASCII码转成unicode if event.type == pygame.KEYDOWN: pass # pygame.VIDEORESIZE
import pygame from sys import exit from math import pi pygame.init() screen = pygame.display.set_mode((500,300)) screen.fill((255,255,255)) pygame.draw.aaline(screen,(10,200,120),(20,20),(200,200)) # draw模块 ,aaline()画线方法 # aalines() 有closed参数,可以首尾相连 # 还有pointlist参数,设置连接点,传列表 # 所以,列表里最少传1个参数,没有endpos,怎么画两条线呢? # points argument must contain more than 1 points,列表里元组不能少于1个 # 且最后一个元组就是endpos pygame.draw.aalines(screen,(100,50,20),False,[(10,20),(30,40),(20,120)]) pygame.draw.arc(screen,(100,200,100),((30,40),(120,60)),pi/3,pi) # 画弧线,draw模块,arc()方法 # 第三个:Rect参数((pos),(width,height)) # 第四、第五个:start_angle,stop_angle,绘制从哪开始,到哪结束 pygame.draw.circle(screen,(0,255,0),(50,50),40,10) # draw.画圆 pygame.display.flip() while True: #一直处于捕获事件的状态 for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
import pygame from sys import exit pygame.init() screen = pygame.display.set_mode((400,300)) #设定屏幕大小 screen.fill((255,255,255)) #填充背景颜色 image = pygame.image.load('luffy3.png') #加载图片并保存 image = pygame.transform.scale(image,(80,80)) #控制图片大小 # transform模块可改变图形大小,或翻转 screen.blit(image,(0,0)) #设置好图片传送到屏幕上 pygame.display.flip() #全部渲染 x = 0 #图片其实所在pos原点 y = 0 xspeed = 10 #设定移动方向,x,y增加的两不一样可以控制方向 yspeed = 10 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() #处理退出事件 pygame.time.delay(50) #用time模块的delay来延缓速度,作用于整个pygame x += xspeed #pos的两个参数循环增加数值就可以自己移动 y += yspeed screen.fill((255,255,255)) #刷新屏幕,但是为什么会一直保留之前的移动痕迹? # 且为什么fill()方法要放在blit()前面? """ 每移动一次,清空一次 """ screen.blit(image,(x,y)) #上传图片和移动后位置 """ 清空后上传具有新的位置的image """ pygame.display.flip() #不能溢出边界 if x<0 or x+80>400: #图片的最左上角就是(0,0),是与边界重合的 # 但下端就要加上自身的宽或高 xspeed = -xspeed #调转方向,只能是变成-a ????? if y<0 or y+80>300: yspeed = -yspeed # while True: # for event in pygame.event.get(): # if event.type == pygame.QUIT: # exit() # # if event.type == pygame.MOUSEMOTION: # x,y = event.pos # screen.fill()