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

Crossin的编程教室

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

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

[复制链接]

0

主题

0

好友

54

积分

注册会员

Rank: 2

发表于 2016-7-7 19:32:52 |显示全部楼层
四张图片循环切换,窗口适应图片大小。
# -*- coding: utf-8 -*-
import pygame
from sys import exit
pygame.init()
pygame.display.set_caption("Hello,World!")
screen = pygame.display.set_mode((600,300),0,32)
p1 = pygame.image.load('0706.jpg').convert()
p2 = pygame.image.load('070602.png').convert()
p3 = pygame.image.load('0707.jpg').convert()
p4 = pygame.image.load('070702.png').convert()

list = [p1,p2,p3,p4]

background = p1
i = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            if i > 2:
                i = 0
            else:
                i += 1
        background = list[i]
        width = background.get_width()
        height = background.get_height()
        screen_size = (width,height)
        screen = pygame.display.set_mode((screen_size),0,32)
    screen.blit(background,(0,0))
    pygame.display.update()
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2016-8-26 16:03:34 |显示全部楼层
为什么我这样就切换不了图片呢:
if bg==pygame.image.load('D:\\Python27\\workspaces\\1.jpg').convert():
                bg=pygame.image.load('D:\\Python27\\workspaces\\0.jpg').convert()
                print 1
else:
                bg=pygame.image.load('D:\\Python27\\workspaces\\1.jpg').convert()
                print 3
这样就可以切换:
if bg==bg1:
                bg=bg2
                print 1
else:
                bg=bg1
                print 3
难道必须是赋给变量才行?求解答
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-8-26 16:13:14 |显示全部楼层
lulu 发表于 2016-8-26 16:03
为什么我这样就切换不了图片呢:
if bg==pygame.image.load('D:\\Python27\\workspaces\\1.jpg').convert() ...

每次调用load会生成新对象,前一种写法本身也不对
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2016-8-29 09:27:33 |显示全部楼层
crossin先生 发表于 2016-8-26 16:13
每次调用load会生成新对象,前一种写法本身也不对

谢谢!还是对方法不了解啊……
回复

使用道具 举报

0

主题

1

好友

114

积分

注册会员

Rank: 2

发表于 2016-9-7 12:58:23 |显示全部楼层
学了这一课之后,想在几张照片随机的基础上,加上从网站上扒下来图,储存,再随机切换。。。

然而,写了两天,发现能拔下URL,但还不会储存图片。 卡在下载图片的步骤
  1. #-*-coding:utf-8-*-

  2. import urllib2
  3. import re
  4. import os
  5. import time
  6. url='https://movie.douban.com/'
  7. response=urllib2.urlopen(url)
  8. html=response.read()#.decode('utf-8')
  9. #print html 从豆瓣抓取网页

  10. #提取图片链接
  11. pics=re.findall(r"http.*?jpg",html)
  12. #if pics:
  13. #    print pics
  14. #else:
  15. #    print 'no pics'

  16. #下载图片
  17. def download(pics,picNo):



  18. #用PYGAME点击播放图片
  19. '''import pygame
  20. from sys import exit
  21. import random

  22. pygame.init()
  23. screen=pygame.display.set_mode((300,424),0,32)
  24. pygame.display.set_caption("Hello,World!")
  25. bg1=pygame.image.load('1.jpg').convert()
  26. bg2=pygame.image.load('2.jpg').convert()
  27. bg3=pygame.image.load('3.jpg').convert()
  28. bg4=pygame.image.load('4.jpg').convert()
  29. bgs=[bg1, bg2, bg3, bg4]
  30. background=bg1
  31. while True:
  32.     for event in pygame.event.get():
  33.         if event.type==pygame.QUIT:
  34.             pygame.quit()
  35.             exit()
  36.         if event.type==pygame.MOUSEBUTTONDOWN:
  37.             background=random.choice(bgs)
  38.     width=background.get_width()
  39.     height=background.get_height()
  40.     screen_size=(width,height)
  41.     screen=pygame.display.set_mode(screen_size,0,32)
  42.     screen.blit(background,(0,0))
  43.     pygame.display.update()
  44. '''
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-9-7 15:41:43 |显示全部楼层
Phoestia 发表于 2016-9-7 12:58
学了这一课之后,想在几张照片随机的基础上,加上从网站上扒下来图,储存,再随机切换。。。

然而,写了两 ...

保存图片就是把图片内容以二进制形式保存到文件里。你搜下 “python 下载图片”之类的,应该会找到很多例子
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

发表于 2016-10-21 11:46:19 |显示全部楼层
crossin 先生你好:
请问:
在第一个:
background = pygame.image.load(r'C:\Users\Tony\Desktop\Demo\1.jpg').convert()
这里,我在其后面加上了:
screen.blit(background, (0,0))
pygame.display.update()
结果图片是显示出来了,但是很卡。
而对于这段代码:

  1. for event in pygame.event.get():
  2.         if event.type == pygame.QUIT:
  3.             #接收到退出事件后退出程序
  4.             pygame.quit()
  5.             exit()
  6.         if event.type == pygame.MOUSEBUTTONDOWN:
  7.     #接收到鼠标按下事件后更换背景
  8.             background = pygame.image.load(r'C:\Users\Tony\Desktop\Demo\2.jpg').convert()
  9.     screen.blit(background, (0,0))
  10.     #将背景图画上去
  11.     pygame.display.update()
复制代码
我理解的是,在没有事件的情况下(比如:打开什么都不做),会直接执行:

  1. screen.blit(background, (0,0))
  2. pygame.display.update()
复制代码
这两行
而有事件发生(比如:点击鼠标):
则会执行:
  1. if event.type == pygame.MOUSEBUTTONDOWN:
  2.     #接收到鼠标按下事件后更换背景
  3.             background = pygame.image.load(r'C:\Users\Tony\Desktop\Demo\2.jpg').convert()
复制代码
然后再次更改背景,刷新图片。
不知道我的理解正确不?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-10-21 13:24:57 |显示全部楼层
Tony 发表于 2016-10-21 11:46
crossin 先生你好:
请问:
在第一个:

我不知道是你贴上来时候弄错了,还是本来就这样。

screen.blit(background, (0,0))
pygame.display.update()
这两个代码不应该放在时间循环里,他们每帧执行,跟事件无关。你放在循环里,那有几个事件,它们就会执行几次

这可能是你很卡的原因吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

44

积分

新手上路

Rank: 1

发表于 2017-8-9 22:42:51 |显示全部楼层
请问,在linux下运行,发现把.convert()全删除,程序也可以正常运行,load之后的转换convert()是不必要的吗?还是linux可以识别载入的图片或者自动转换了?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-8-10 11:54:15 |显示全部楼层
qtjason 发表于 2017-8-9 22:42
请问,在linux下运行,发现把.convert()全删除,程序也可以正常运行,load之后的转换convert()是不必要的吗 ...

有可能是自动转换了,这个和图片格式也有关
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-5-22 13:08 , Processed in 0.021810 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部