如何编写代码,以便使用pygame在Python中通过鼠标移动来控制图像?
我已经尝试过这个:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygame
import random
pygame.init()
size=[800,600]
screen=pygame.display.set_mode(size)
pygame.display.set_caption("Sub Dice")
background_position=[0,0]
background_image=pygame.image.load('C:\Users\SHIVANGI\Desktop\shivangi project\program\star.png').convert()
card=pygame.image.load('C:\Users\SHIVANGI\Desktop\shivangi project\program\lappy.png').convert_alpha()
card=pygame.transform.smoothscale(card,(130,182))
closeDeckShirt=pygame.image.load('C:\Users\SHIVANGI\Desktop\shivangi project\program\star.png').convert_alpha()
SETFPS=30
zx=0
zy=0
done=False
clock=pygame.time.Clock()
while done==False:
clock.tick(SETFPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done=True
if event.type == pygame.MOUSEBUTTONDOWN:
print('a')
screen.blit(background_image, background_position)
screen.blit(card,[zx,zy])
zx=zx+2
zy=zy+2
pygame.display.flip()
pygame.quit ()
然而,无论我在何处移动鼠标,动作仅限于一个方向。我希望图像向前移动并通过鼠标的运动控制侧向运动。
另外,我的目标是创造一种像水上翅膀一样的游戏。
答案 0 :(得分:0)
你非常接近于完成这项工作。 我做了一些小编辑。
所以,你的程序有两个问题。首先,您的程序正在每个pygame.event
移动图像,无论事件如何 - 您可以通过按键,单击鼠标等来看到这一点。第二个问题是您正在移动图像一个固定的方向。
我唯一改变的是你的while
循环:
while done==False:
clock.tick(SETFPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done=True
if event.type == pygame.MOUSEBUTTONDOWN:
print('a')
if event.type == pygame.MOUSEMOTION: # We only want to move the image when the mouse is moved.
mouse_position = pygame.mouse.get_pos() # Where is the mouse at?
screen.blit(background_image, background_position)
screen.blit(card, [zx, zy])
zx = mouse_position[0] # mouse_position is in the form [x,y], we only want the x part
zy = mouse_position[1]
pygame.display.flip()
正如您所看到的,Pygame有一个mouse.get_pos()
函数,实际上可以在屏幕上显示鼠标的位置。这只是一个(x,y)坐标。
答案 1 :(得分:0)
pygame.MOUSEMOTION
事件具有rel
属性(相对运动),您可以使用它来更改x, y
坐标。只需对水平移动x += event.rel[0]
和垂直移动y += event.rel[1]
。
您还可以使用if event.buttons[0]:
检查鼠标按钮是否被按下(1是中间按钮,2是右键)。
要将坐标设置为鼠标位置,可以执行以下操作:x, y = event.pos
。
import pygame as pg
pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')
IMG = pg.Surface((120, 90))
IMG.fill((0, 120, 200))
x = 200
y = 300
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.MOUSEMOTION:
if event.buttons[0]: # Left mouse button pressed.
x += event.rel[0]
y += event.rel[1]
screen.fill(BG_COLOR)
screen.blit(IMG, (x, y))
pg.display.flip()
clock.tick(60)
pg.quit()