秒会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中点击一个按钮实现相机之间的转换,点选已添加物体,并使用键盘实现移动鼠标实现旋转缩放操作

unity中鼠标点击触发物体运动

unity中怎么让物体随着鼠标移动?

unity中让物体移动到鼠标点击位置(单击移动和双击暂停移动)

Unity 物体跟随鼠标点击移动,判断物体是否在移动

新人求教unity 2d 物体跟随鼠标移动的问题