鱼C论坛

 找回密码
 立即注册
查看: 3643|回复: 5

pygame壁球小游戏代码的疑问

[复制链接]
发表于 2022-3-28 19:15:41 | 显示全部楼层 |阅读模式
10鱼币
import pygame
import sys

pygame.init()

size = width, height = 600, 400
speed = [1, 1]
Black = (0, 0, 0)
# screen = pygame.display.set_mode(size)
screen = pygame.display.set_mode(size, pygame.RESIZABLE)
pygame.display.set_caption('Pygame壁球')
ball = pygame.image.load('C:\\Users\\admin\\Desktop\\PYG02-ball.gif')
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()
still = False

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                if speed[0] == 0:
                    speed[0] = speed[0]
                else:
                    speed[0] = (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                if speed[0] > 0:
                    speed[0] += 1
                else:
                    speed[0] -= 1
            elif event.key == pygame.K_UP:
                if speed[1] > 0:
                    speed[1] += 1
                else:
                    speed[1] -= 1
            elif event.key == pygame.K_DOWN:
                if speed[1] == 0:
                    speed[1] = speed[1]
                else:
                    speed[1] = (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                still = True
        elif event.type == pygame.MOUSEBUTTONUP:
            still = False
            if event.button == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
        elif event.type == pygame.MOUSEMOTION:
            if event.buttons[0] == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
                print(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)

    if pygame.display.get_active() and not still:
        ballrect = ballrect.move(speed[0], speed[1])
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
        if ballrect.right > width and ballrect.right + speed[0] > ballrect.right:
            speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]
        if ballrect.bottom > height and ballrect.bottom + speed[1] > ballrect.bottom:
            speed[1] = -speed[1]

    screen.fill(Black)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)
    # pygame.time.Clock().tick(fps)

上面的代码中的pygame.MOUSEMOTION事件我不是很理解,(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)的结果不是(0,0)吗,
为什么球会跟着鼠标一起移动

PYG02-ball.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-28 19:16:12 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-29 09:03:40 | 显示全部楼层
有没有人来管管我啊,卡这里了,找半天没结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-29 11:50:41 | 显示全部楼层
来个人啊,球球了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-9 14:13:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-9 14:55:46 | 显示全部楼层
在输出之前已经执行过ballrect.move(...)了,所以输出的是(0,0)
把ln58和ln59换一下输出的就不是0,0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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