请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

【Pygame 第3课】 游戏中的事件

[复制链接]

0

主题

0

好友

66

积分

注册会员

Rank: 2

发表于 2013-10-13 14:53:16 |显示全部楼层
请问为什么pygame.image.load().convert()后面的convet()是可以省略的呢?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-10-13 16:32:19 |显示全部楼层
TongShan 发表于 2013-10-13 14:53
请问为什么pygame.image.load().convert()后面的convet()是可以省略的呢?

convert是将读进来的图片做一些像素转换,比如颜色深度、遮罩等,如果不加任何参数,这个转换是可以省略的。但如果我们要用到一张带透明部分的图片,就必须用另一个类似的方法convert_alpha,这时候就不能省略了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

101

积分

注册会员

Rank: 2

发表于 2013-10-18 18:37:26 |显示全部楼层
两张图根据图片尺寸自动设置尺寸大小显示
  1. # -*- coding: utf-8 -*-
  2. import pygame
  3. #导入pygame库
  4. from sys import exit
  5. #向sys模块借一个exit函数用来退出程序
  6. pygame.init()
  7. #初始化pygame,为使用硬件做准备

  8. pygame.display.set_caption("Hello, World!")
  9. #设置窗口标题
  10. background = pygame.image.load('bg.jpg')
  11. #加载并转换图像
  12. while True:
  13. #游戏主循环

  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             #接收到退出事件后退出程序
  17.             pygame.quit()
  18.             exit()
  19.         if event.type == pygame.MOUSEBUTTONDOWN:
  20.     #接收到鼠标按下事件后更换背景
  21.             background = pygame.image.load('bg2.jpg').convert()
  22.     width = background.get_width()
  23.     height = background.get_height()
  24.     screen = pygame.display.set_mode((width, height), 0, 32)
  25. #创建了一个窗口,窗口大小和背景图片大小一样
  26.     screen.blit(background, (0,0))
  27.     #将背景图画上去
  28.     pygame.display.update()
  29.     #刷新一下画面
复制代码
回复

使用道具 举报

0

主题

1

好友

80

积分

注册会员

Rank: 2

发表于 2013-10-19 16:25:56 |显示全部楼层
  1. # -*- coding: utf-8 -*-
  2. import pygame
  3. #导入pygame库
  4. from sys import exit
  5. #向sys模块借一个exit函数用来退出程序

  6. from pygame import *

  7. pygame.init()
  8. #初始化pygame,为使用硬件做准备
  9. screen = pygame.display.set_mode((400, 602), 0, 32)
  10. #创建了一个窗口,窗口大小和背景图片大小一样
  11. pygame.display.set_caption("Hello, World!")
  12. #设置窗口标题
  13. background1 = pygame.image.load('1.jpg').convert()
  14. background2 = pygame.image.load('2.jpg').convert()
  15. bg = background1
  16. #加载并转换图像
  17. while True:
  18. #游戏主循环
  19.     for event in pygame.event.get():
  20.         if event.type == QUIT:
  21.             #接收到退出事件后退出程序
  22.             pygame.quit()
  23.             exit()
  24.         if event.type == MOUSEBUTTONDOWN:
  25.             if bg == background2:
  26.                  bg = background1
  27.             else:
  28.                  bg = background2
  29.     screen.blit(bg, (0,0))
  30.     #将背景图画上去
  31.     pygame.display.update()
  32.     #刷新一下画面
复制代码
回复

使用道具 举报

2

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2013-11-21 20:18:02 |显示全部楼层
  1. import pygame

  2. from sys import exit

  3. pygame.init()

  4. screen = pygame.display.set_mode((700, 170), 0, 32)

  5. pygame.display.set_caption("Hello, World!")

  6. bg1 = pygame.image.load('bg.jpg').convert()
  7. bg2 = pygame.image.load('bg2.jpg').convert()
  8. bg3 = pygame.image.load('bg3.jpg').convert()
  9. i=1
  10. bglist=[bg1,bg2,bg3]
  11. num=len(bglist)
  12. background=bglist[0]


  13. while True:

  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             pygame.quit()
  17.             exit()
  18.         if event.type == pygame.MOUSEBUTTONDOWN:
  19.             background=bglist[i]
  20.             i=i+1
  21.             if i>num-1 :
  22.                 i=0
  23.         screen.blit(background,(0,0))
  24.         pygame.display.update()
复制代码
回复

使用道具 举报

21

主题

1

好友

373

积分

中级会员

Rank: 3Rank: 3

发表于 2014-3-8 09:52:14 |显示全部楼层
回复

使用道具 举报

0

主题

1

好友

16

积分

新手上路

Rank: 1

发表于 2015-10-15 20:12:19 |显示全部楼层
  1. # coding = utf-8
  2. import pygame
  3. from sys import exit
  4. pygame.init()
  5. screen = pygame.display.set_mode((595,834),0,32)
  6. pygame.display.set_caption("Hello, Rain")
  7. back = ['datababy01.jpg','datababy02.jpg','datababy03.jpg','datababy04.jpg']

  8. background = pygame.image.load(back[0]).convert()

  9. i = 0
  10. while True:
  11.     for event in pygame.event.get():
  12.         if event.type == pygame.QUIT:
  13.             pygame.quit()
  14.             exit()
  15.         if event.type == pygame.MOUSEBUTTONDOWN:
  16.             i += 1
  17.             background = pygame.image.load(back[i % 4]).convert()
  18.     screen.blit(background,(0,0))
  19.     pygame.display.update()
复制代码
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-24 00:24:45 |显示全部楼层
本帖最后由 周末晒被子 于 2015-12-24 00:34 编辑

本来不知道怎么解决“4张图片列表循环”这个问题的,感觉很简单,尝试过用 for...in... 放在 while 循环的下一层,原本在 while 循环内的代码块全部丢进 for...in... 里面,失败,后来知道真相的我哭笑不得,听老师的没错,不知道哪里出错时,多print一下。

后来看到第一页一哥们的代码,受启发在 if event.type == pygame.MOUSEBUTTONDOWN: 之后用 if 条件。

借鉴了把窗口尺寸自动匹配图片尺寸的哥们的想法。

剩下的就是自己想出来的,基本上跟楼上各位的代码有重合之处。还学了一个 len() 的用法。

# -*- coding: utf-8 -*-
import pygame
from sys import exit
pygame.init()
pygame.display.set_caption('Hello world')
bglist = ['F:\some\d1.jpg','F:\some\d2.jpg','F:\some\d3.jpg','F:\some\d4.jpg']

background = pygame.image.load(bglist[0])

i = len(bglist)

num = 1
while True:
   
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
               
            if event.type == pygame.MOUSEBUTTONDOWN:
                background = pygame.image.load(bglist[num]).convert()
                num += 1
                if num == i:
                    num = 0
                    
        width = background.get_width()
        height = background.get_height()
        screen = pygame.display.set_mode((width,height),0,32)
        
        screen.blit(background,(0,0))
        pygame.display.update()
        
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-24 00:26:13 |显示全部楼层
就是不知道为什么我的图片路径一定要用绝对路径,不能像楼上各位一样简单得用"bg.jpg"...
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-12-24 11:42:51 |显示全部楼层
周末晒被子 发表于 2015-12-24 00:26
就是不知道为什么我的图片路径一定要用绝对路径,不能像楼上各位一样简单得用"bg.jpg"... ...

你是不是通过编辑器直接运行的?这样有时候路径会比较奇怪。试试在命令行下运行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-30 20:14 , Processed in 0.017811 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部