lzb1001 发表于 2022-7-13 16:14:48

关于=与==的使用

本帖最后由 lzb1001 于 2022-7-13 21:37 编辑

# 绘制圆形

import pygame
import sys
from pygame.locals import *


pygame.init()



WHITE = (255, 255, 255) # 白色
BLACK = (0, 0, 0) # 黑色
RED = (255, 0, 0) # 红色
GREY = (128, 128, 128) # 灰色
YELLOW = (255, 255, 0) # 黄色
BLUE = (0, 0, 255) # 蓝色
GREEN = (0, 128, 0) # 绿色


size = width, height = 640, 400
screen = pygame.display.set_mode(size) # 生成一个screen的Surface对象
pygame.display.set_caption('FishC Demo')


position = size//2, size//2


moving = False


clock = pygame.time.Clock()



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

      if event.type == MOUSEBUTTONDOWN:
            if event.button == 1:
                moving = True

      if event.type == MOUSEBUTTONUP:
            if event.button == 1: # 好像可以省略不要
                moving = False


    if moving: # 也可写成if moving == True:
      position = pygame.mouse.get_pos()
            

    screen.fill(WHITE)


   
    pygame.draw.circle(screen, BLACK, position, 3, 0)
    pygame.draw.circle(screen, RED, position, 25, 1)
    pygame.draw.circle(screen, YELLOW, position, 50, 1)
    pygame.draw.circle(screen, BLUE, position, 75, 1)
    pygame.draw.circle(screen, GREEN, position, 100, 1)
    pygame.draw.circle(screen, GREY, position, 125, 1)
    pygame.draw.circle(screen, BLACK, position, 150, 1)

   

    pygame.display.flip()
   
   
    clock.tick(10)

------------------------------------------
Windows 10 专业版 | Python 3.7.6
------------------------------------------

【我的问题】

1、=是赋值,比如moving = False,而==是判断,比如if moving == True或if event.button == 1

上面这样理解不知道对不对?

2、见代码中的蓝色字体,该行代码是否可以省略?

3、当if moving:时,也就是鼠标左键按下时,实时获得鼠标当前的坐标,而如果把if moving:改成if moving == False时,为何不需要鼠标左键,即只要鼠标移动到哪,同心圆就移动到哪呢?这个问题不知道大家理不理解我的困惑在哪 - > 代码中if moving == False与if event.button == 1:关联不是嘛?

******************************

感谢大神不吝赐教,为新手解疑释惑。

赠人玫瑰,手有余香,好人一生平安!

python爱好者. 发表于 2022-7-13 18:29:00

1.对
2.不可以省略,我给你分析一下:
if event.type == MOUSEBUTTONUP: #这里表示如果按下鼠标,并不直接代表按下鼠标左键,所以需要下面进一步判断是按下鼠标哪一个键,不能省略,不然按下鼠标右键也算了
            if event.button == 1: # 判断是否按下的为鼠标左键,1 表示鼠标左键
                moving = False
3.因为你前面代码:
if event.type == MOUSEBUTTONDOWN:
            if event.button == 1: #当按下鼠标左键即可以移动圆
                moving = True
所以如果改成:
if moving == False
就成了:
如果不按下鼠标左键
因为:
moving 为 True 时,就代表按下鼠标左键,反之松开,所以会导致你说的效果相反!
4.对

lzb1001 发表于 2022-7-13 20:45:19

本帖最后由 lzb1001 于 2022-7-13 21:33 编辑

python爱好者. 发表于 2022-7-13 18:29
1.对
2.不可以省略,我给你分析一下:



谢谢大神指点。

2、我的想法是:

---当按下鼠标按键的时候,才需要进一步判断按下的是鼠标的哪个键,也就是当按下鼠标按键的时候,if event.button == 1这行代码为必须
---而当释放鼠标按键的时候,可以不需要判断释放的是鼠标的哪个键,也就是当释放鼠标按键的时候,不需要if event.button == 1这行代码

经测试,如果把释放鼠标按键时候的该行代码删除,运行起来效果好像不受任何影响。

lzb1001 发表于 2022-7-13 21:21:53

本帖最后由 lzb1001 于 2022-7-13 22:13 编辑

python爱好者. 发表于 2022-7-13 18:29
1.对
2.不可以省略,我给你分析一下:



我将代码中while循环语句修改为如下:
……
while True:
   
    for event in pygame.event.get():
      if event.type == QUIT:
            sys.exit()

      if event.button == 1:
            
            if event.type == MOUSEBUTTONDOWN:

                moving = True

            if event.type == MOUSEBUTTONUP:
            
                moving = False
……

结果运行后返回如下错误提示!
====================== RESTART: D:\work\p16_6_pg_3 - 副本.py ==============
pygame 2.1.2 (SDL 2.0.18, Python 3.7.6)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "D:\work\p16_6_pg_3 - 副本.py", line 51, in <module>
    if event.button == 1:
AttributeError: 'Event' object has no attribute 'button'
页: [1]
查看完整版本: 关于=与==的使用