鱼C论坛

 找回密码
 立即注册
查看: 691|回复: 3

pygame的矩形绘制问题

[复制链接]
发表于 2018-7-22 08:23:39 | 显示全部楼层 |阅读模式

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

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

x
源代码如下

  1. import sys

  2. import pygame as pg
  3. from pygame.locals import *

  4. def run():
  5.     size = (600, 400)
  6.     bg = (255, 255, 255)

  7.     select = 0
  8.     drag = 0

  9.     start_select = []
  10.     end_select = []
  11.     select_select = []
  12.     start_drag = []
  13.     end_drag = []
  14.     drag_drag = []

  15.     temp = 1

  16.     screen = pg.display.set_mode(size)
  17.     bg_img = pg.image.load('sea.jpg')
  18.     bg_position = bg_img.get_rect()

  19.     f = open('event.txt', 'w')

  20.     while True:
  21.         # 事件队列
  22.         for event in pg.event.get():
  23.             f.write(str(event) + '\n')
  24.             if event.type == pg.QUIT:
  25.                 sys.exit()
  26.             elif event.type == pg.MOUSEBUTTONDOWN:
  27.                 # 第一次按下鼠标时,是进行选择
  28.                 if select == 0 and drag == 0:
  29.                     start_select = pg.mouse.get_pos()
  30.                     select = 1
  31.                 # 第二次按下鼠标时,是进行拖动
  32.                 elif select == 2 and drag == 0:
  33.                     start_drag = [event.x, event.y]
  34.                     drag = 1
  35.                 # elif select == 2 and drag == 1:
  36.                 #     drag_drag = pg.mouse.get_pos()
  37.                 elif select == 2 and drag == 2:
  38.                     select = 0
  39.                     drag = 0
  40.                     # TODO 待补充删除选择框和被截取图片的代码段
  41.             elif event.type == pg.MOUSEBUTTONUP:
  42.                 if select == 1 and drag == 0:
  43.                     end_select = pg.mouse.get_pos()
  44.                     # select_box = pg.draw.rect(bg_img, (0, 0, 0), (start_select, end_select), 1)
  45.                     select = 2
  46.                     drag = 1
  47.                 elif select == 2 and drag == 1:
  48.                     end_drag = pg.mouse.get_pos()
  49.                     drag = 2


  50.         if pg.mouse.get_pressed():
  51.             if select == 1 and drag == 0:
  52.                 select_select = pg.mouse.get_pos()
  53.                 width = select_select[0] - start_select[0]
  54.                 height = select_select[1] - start_select[1]
  55.                 select_box = pg.draw.rect(bg_img, (0, 0, 0), (start_select[0], start_select[1], width, height), 1)
  56.             elif select == 2 and drag == 1:
  57.                 drag_drag = pg.mouse.get_pos()

  58.         # if temp < 100:
  59.         #     pg.draw.rect(bg_img, (0, 0, 0), (0, 0, temp, temp), 1)
  60.         #     temp += 1
  61.         screen.fill(bg)
  62.         screen.blit(bg_img, bg_position)

  63.         pg.display.flip()
  64.         pg.time.delay(100)

  65. run()
复制代码


不知道为什么,在第一次点击拖动时画出来的矩形框回叠加起来,就像图片里的一样,想问一下这是为什么啊
temp.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-22 15:40:39 | 显示全部楼层
pg.draw.rect(bg_img, (0, 0, 0), (start_select[0], start_select[1], width, height), 1)你都是画在bg_img上,而不是screen
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-22 18:46:03 | 显示全部楼层
塔利班 发表于 2018-7-22 15:40
pg.draw.rect(bg_img, (0, 0, 0), (start_select[0], start_select[1], width, height), 1)你都是画在bg_im ...

是不是画在bg_img上就相当于把bg_img给改变了啊,所以后面再用
  1. screen.blit(bg_img, bg_position)
复制代码

的时候就把这些变化也保留下来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-22 19:20:31 | 显示全部楼层
wmxs 发表于 2018-7-22 18:46
是不是画在bg_img上就相当于把bg_img给改变了啊,所以后面再用

的时候就把这些变化也保留下来了

是的
你这个还有很大逻辑错误,建议你参考下甲鱼原课件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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