秒会Pygame:键盘移动和鼠标点击移动物体的方法(含完整的代码)
Posted 哦年酱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了秒会Pygame:键盘移动和鼠标点击移动物体的方法(含完整的代码)相关的知识,希望对你有一定的参考价值。
目录
预备知识
pygame的基本函数介绍
1.初始化函数,pygame的必备
pygame.init()
2.设置屏幕的大小
pygame.display.set_mode(size) //(长,宽)
3. 程序的命名
pygame.display.set_caption("string")
4.屏幕的颜色填充
screen.fill(R,B,G)
5.图片的载入
pygame.image.load(''路径'')
6.事件的获取
pygame.event.get()
7.画圆
pygame.draw.circle(屏幕,颜色,圆心,半径)
8.更新事件
pygame.display.update()
9.二维向量对象(多用于坐标)
pygame.math.Vector2()
10.返回向量的欧几里得长度
pygame.math.Vector2.length()
11.规范化向量
pygame.math.Vector2.normalize_ip()
12.键盘按下的事件
event.type == pygame.KEYDOWN
event.key == pygame.K_UP //向上
event.key == pygame.K_DOWN //向下
event.key == pygame.K_LEFT //向左
event.key == pygame.K_RIGHT //向右
13. 鼠标的弹起事件
event.type == pygame.MOUSEBUTTONUP
好了,有了以上知识就可以开始施法了:
键盘控制物体移动事件
在屏幕上初始化一个外星人,用上、下、左、右键控制外星人移动
import sys
import pygame
pygame.init()
size = width, height = 600, 400
screen = pygame.display.set_mode(size)
screen.fill('white')
pygame.display.set_caption('外星人键盘移动事件')
img=pygame.image.load('C:/Users/leslie/Desktop/alien.png')
position = img.get_rect()
while True:
site = [0, 0]
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
site[1] -= 10
if event.key == pygame.K_DOWN:
site[1] += 10
if event.key == pygame.K_LEFT:
site[0] -= 10
if event.key == pygame.K_RIGHT:
site[0] += 10
if event.type == pygame.MOUSEBUTTONDOWN:
xx,yy=event.pos
site=[xx,yy]
position = position.move(site)
screen.fill('white')
screen.blit(img, position)
pygame.display.flip()
鼠标点击控制物体移动事件
在屏幕上初始化一个外星人,点击鼠标使外星人移动到鼠标点击的地方
import pygame
from pygame import Vector2
import sys
pygame.init()
pygame.display.set_caption('外星人鼠标点击移动')
size = width, height = 600, 600
screen = pygame.display.set_mode(size)
color = (250, 250, 250)
alien = pygame.image.load('C:/Users/leslie/Desktop/alien.png')
alienrect = alien.get_rect()
start_position = Vector2(0,0)
speed = 6
mouse_xy = (0,0)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_xy = Vector2(event.pos)
dis = mouse_xy - start_position
dis_lenth = dis.length()
if dis_lenth < speed:
mouse_xy = start_position
elif dis_lenth != 0:
dis.normalize_ip()
dis = dis*speed
start_position += dis
screen.fill(color)
screen.blit(alien, start_position)
pygame.display.flip()
鼠标移动的同时画彩色小球
随着鼠标的移动,每移动以下,在移动后的位置画出颜色随机的小球
import pygame
import sys
from random import randint
pygame.init()
screen = pygame.display.set_mode((500,500))
screen.fill('white')
pygame.display.set_caption("鼠标移动画圆")
pygame.display.flip()
while True:
event = pygame.event.wait()
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
mx,my = event.pos
pygame.draw.circle(screen,(255,255,0),(mx,my),20)
pygame.display.update()
if event.type == pygame.MOUSEBUTTONUP:
pass
if event.type == pygame.MOUSEMOTION:
mx, my = event.pos
r = randint(0,255)
g = randint(0,255)
b = randint(0,255)
pygame.draw.circle(screen, (r,g,b,),(mx, my),20)
pygame.display.update()
其中的外星人图片如下:
当然,我们还可以给程序加上背景,假装外星人在太空中遨游~~~
Pygame中鼠标点击之后,物体逐渐移动到鼠标点击坐标的方法
1 import pygame 2 from pygame.locals import * 3 from pygame.math import * 4 import sys 5 6 pygame.init() 7 size = width, height = 1600, 900 8 screen = pygame.display.set_mode(size) 9 color = (0, 0, 0) # 设置颜色 10 ball = pygame.image.load(‘dabai_new.gif‘) 11 ballrect = ball.get_rect() 12 sp = Vector2(0,0) #设置初始位置 13 speed = 3.0 14 clock = pygame.time.Clock() 15 mouse_xy = (0,0) 16 while True: 17 clock_time = clock.tick_busy_loop(60) 18 for event in pygame.event.get(): 19 if event.type == pygame.QUIT: 20 sys.exit() 21 elif event.type == pygame.MOUSEBUTTONDOWN: 22 mouse_xy = Vector2(event.pos)#获取鼠标的向量 23 dis = mouse_xy - sp 24 dis_lenth = dis.length()#计算物体到鼠标点击处的距离 25 if dis_lenth < speed: #做一个判断,如果距离小于速度,则不需要移动 26 mouse_xy = sp 27 elif dis_lenth != 0: # 28 dis.normalize_ip() #坐标归一化非常重要 29 dis = dis*speed #计算每一帧移动的坐标数 30 sp += dis #叠加每次移动的坐标 31 32 screen.fill(color) 33 screen.blit(ball, sp) 34 pygame.display.flip()
这个方案中最重要的就是坐标归一化,归一化之后长度永远为一,实际移动的坐标数就是帧数乘以速度的值
我把pygame.Vertor2中坐标归一化使用的公式列出来:
以上是关于秒会Pygame:键盘移动和鼠标点击移动物体的方法(含完整的代码)的主要内容,如果未能解决你的问题,请参考以下文章
unity3d中点击一个按钮实现相机之间的转换,点选已添加物体,并使用键盘实现移动鼠标实现旋转缩放操作