鱼C论坛

 找回密码
 立即注册
查看: 957|回复: 4

[已解决]绘图问题

[复制链接]
发表于 2019-5-29 17:40:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
正确的运行应当是:图片在矩形框内不停的运动。


但本段代码运行时,鼠标在矩形内移动,图片才运动,
鼠标停止或鼠标在框外时,图片都不动。
请教大侠指导一下,错在哪里?
import pygame
import sys

pygame.init()

size=width,height=600,400
speed = [-2,1]
bg = (255,255,255)

#创建窗口,返回Surface对象
screen = pygame.display.set_mode(size)
pygame.display.set_caption("初次见面,多多关照")

turtle = pygame.image.load("cat.jpg")
position = turtle.get_rect()
#获取图片的位置矩形

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        position = position.move(speed)

        if position.left<0 or position.right>width:

            turtle = pygame.transform.flip(turtle,True,False)
            #True水平翻转

            speed[0] = -speed[0]
            
        if position.top<0 or position.bottom>height:

            speed[1] = -speed[1]

        screen.fill(bg)

        screen.blit(turtle,position)
        #更新图象

        pygame.display.flip()
        #双缓冲
        pygame.time.delay(10)
最佳答案
2019-5-29 18:28:58
你这个把后面的代码都放在事件的循环里面了,如果没有事件就不会更新画面和其它操作了,你可以改成这样
  1. import pygame
  2. import sys

  3. pygame.init()

  4. size=width,height=600,400
  5. speed = [-2,1]
  6. bg = (255,255,255)

  7. #创建窗口,返回Surface对象
  8. screen = pygame.display.set_mode(size)
  9. pygame.display.set_caption("初次见面,多多关照")

  10. turtle = pygame.image.load("cat.jpg")
  11. position = turtle.get_rect()
  12. #获取图片的位置矩形

  13. while True:
  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             sys.exit()

  17.     position = position.move(speed)

  18.     if position.left<0 or position.right>width:

  19.         turtle = pygame.transform.flip(turtle,True,False)
  20.             #True水平翻转

  21.         speed[0] = -speed[0]
  22.             
  23.     if position.top<0 or position.bottom>height:

  24.         speed[1] = -speed[1]

  25.     screen.fill(bg)

  26.     screen.blit(turtle,position)
  27.         #更新图象

  28.     pygame.display.flip()
  29.         #双缓冲
  30.     pygame.time.delay(10)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-29 18:28:58 | 显示全部楼层    本楼为最佳答案   
你这个把后面的代码都放在事件的循环里面了,如果没有事件就不会更新画面和其它操作了,你可以改成这样
  1. import pygame
  2. import sys

  3. pygame.init()

  4. size=width,height=600,400
  5. speed = [-2,1]
  6. bg = (255,255,255)

  7. #创建窗口,返回Surface对象
  8. screen = pygame.display.set_mode(size)
  9. pygame.display.set_caption("初次见面,多多关照")

  10. turtle = pygame.image.load("cat.jpg")
  11. position = turtle.get_rect()
  12. #获取图片的位置矩形

  13. while True:
  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             sys.exit()

  17.     position = position.move(speed)

  18.     if position.left<0 or position.right>width:

  19.         turtle = pygame.transform.flip(turtle,True,False)
  20.             #True水平翻转

  21.         speed[0] = -speed[0]
  22.             
  23.     if position.top<0 or position.bottom>height:

  24.         speed[1] = -speed[1]

  25.     screen.fill(bg)

  26.     screen.blit(turtle,position)
  27.         #更新图象

  28.     pygame.display.flip()
  29.         #双缓冲
  30.     pygame.time.delay(10)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-29 21:12:40 | 显示全部楼层
大侠,代码没有修改,但是运行情况正确,为什么会这样呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-31 11:59:10 | 显示全部楼层
casanava 发表于 2019-5-29 21:12
大侠,代码没有修改,但是运行情况正确,为什么会这样呢?

额,有修改的,你对比一下缩进就知道了,你之前的代码把更新画面那些操作都放在了事件里面了,如果程序没有事件的话(比如鼠标移动,点击,按键等操作),就不会执行画面更新等操作了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-1 07:02:23 | 显示全部楼层
谢谢,看出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 10:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表