|

楼主 |
发表于 2022-3-24 02:20:35
|
显示全部楼层
还是失败~改不动了~写的又臭又长~回头把这个搞明白了 继续学习把zoon封装成类 fov封装成zoon的子类 ~估计代码会好看很多吧
# demo.py
import pygame
import sys
#将pygame的所有常量名导入
from pygame.locals import *
#初始化 pygame
pygame.init()
#定义初始窗口大小,视场角旋转速度,背景颜色,移动位置
size = width, height = 720 , 480
bg = (0, 0, 0)
#设置旋转角度
angle_right = 0
angle_left = 0
#设置放大、缩小比率
ratio = 1.0
#创建demo指定大小的窗口、全屏状态
screen = pygame.display.set_mode(size, RESIZABLE)
fullscreen = not FULLSCREEN
#创建窗口标题
pygame.display.set_caption('监测覆盖范围——DEMO——PURPLERIVER.CE')
#导入视场角图片(fov),导入扫描区域图片(zoon),电子地图(map)
png_fov = pygame.image.load('png_fov.png').convert_alpha()
png_change_fov = png_fov
png_zoon = pygame.image.load('png_zoon.png').convert_alpha()
png_change_zoon = png_zoon
png_map = pygame.image.load('png_map.png').convert_alpha()
png_map = pygame.transform.scale(png_map,(720, 480))
#获得视场角(fov),扫描区域(zoon)的位置矩形
where_fov = png_fov.get_rect()
where_change_fov = where_fov
center = where_change_fov.center
x, y = x1, y1 = center
print('初始中心点坐标'+str(center)+str(where_change_fov))
where_zoon = png_zoon.get_rect()
where_change_zoon = where_zoon
move_x_fov, move_y_fov = where_change_fov.center
move_x_zoon, move_y_zoon = where_change_zoon.center
#主程序DEMO循环
while True:
#定义退出事件(点击关闭或按下ESC键)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
#定义退出按键
if event.key == K_ESCAPE:
sys.exit()
if event.key == K_RIGHT:
move_x_fov += 20
move_y_fov += 0
move_x_zoon += 20
move_y_zoon += 0
if event.key == K_LEFT:
move_x_fov -= 20
move_y_fov -= 0
move_x_zoon -= 20
move_y_zoon += 0
if event.key == K_UP:
move_x_fov -= 0
move_y_fov -= 20
move_x_zoon -= 0
move_y_zoon -= 20
if event.key == K_DOWN:
move_x_fov += 0
move_y_fov += 20
move_x_zoon += 0
move_y_zoon += 20
where_change_fov.center = (int(move_x_fov), int(move_y_fov ))
where_change_zoon.center = (int(move_x_zoon), int(move_y_zoon))
#print('位移后定位'+str(move_x_fov))
#定义全屏按键
if event.key == K_F11:
fullscreen = not fullscreen
if fullscreen:
screen = pygame.display.set_mode((1920, 1080), FULLSCREEN | HWSURFACE)
png_map = pygame.transform.scale(png_map,(int(1920), int(1080)))
else:
screen = pygame.display.set_mode(size)
#放大、缩小监测范围(“=”放大,“-”缩小,“空格”恢复原尺寸,left right up down 控制左右上下移动)
if event.key == K_EQUALS or event.key == K_MINUS:
if event.key == K_EQUALS:
ratio += 0.1
if event.key == K_MINUS:
ratio -= 0.1
#变换后的监控范围像素值
png_change_fov = pygame.transform.smoothscale(png_fov, (int(where_fov.width * ratio), int(where_fov.height * ratio)))
png_change_zoon = pygame.transform.smoothscale(png_zoon, (int(where_zoon.width * ratio), int(where_zoon.height * ratio)))
#获取最新的位置
where_change_fov = png_change_fov.get_rect()
where_change_zoon = png_change_zoon.get_rect()
#定义视图中心点
where_change_fov.center = move_x_fov, move_y_fov
where_change_zoon.center = move_x_zoon, move_y_zoon
#开始旋转
if event.key == K_a or event.key == K_d:
if event.key == K_a:
print('旋转前定位'+str(where_change_fov))
angle_left += 15
png_angle_fov = pygame.transform.rotate(png_change_fov, (angle_left))
where_angle_fov = png_angle_fov.get_rect()
center_change=where_angle_fov.center #旋转后精灵中心点坐标center
center_temp=[int(x-x1), int(y-y1)]
where_change_fov=where_angle_fov.move(center_temp) #移动旋转后的'精灵'中心点返回原始'精灵'中心点
print('旋转后定位'+str(where_change_fov))
if event.key == K_d:
print('旋转前定位'+str(where_change_fov.center))
angle_right -= 15
png_angle_fov = pygame.transform.rotate(png_change_fov, (angle_right))
where_angle_fov = png_angle_fov.get_rect()
center_change=where_angle_fov.center #旋转后精灵中心点坐标center
center_temp=[int(x-x1), int(y-y1)]
where_change_fov=where_angle_fov.move(center_temp) #移动旋转后的'精灵'中心点返回原始'精灵'中心点
print('旋转后定位'+str(where_change_fov.center))
#where_angle_fov = png_angle_fov.get_rect()
#where_angle_fov.center = int(move_x_fov), int(move_y_fov )
#where_change_fov.center = where_angle_fov.center
#center_change = where_change_fov.center
#x1, y1 = center_change
#center_temp=[int(x-x1), int(y-y1)]
#where_change_fov = where_change_fov.move(center_temp)
#定义调整窗口大小事件
if event.type == VIDEORESIZE:
size = event.size
width, height = size
screen = pygame.display.set_mode(size, RESIZABLE)
png_map = pygame.transform.scale(png_map,(int(width), int(height)))
#if event.type == pygame.VIDEORESIZE:
#screen = pygame.display.set_mode((1920, 1080), FULLSCREEN | HWSURFACE)
#填充背景
screen.fill(bg)
#更新图像(fov、zoon、map)区域
screen.blit(png_map,(0,0))
screen.blit(png_change_zoon, (where_change_zoon))
screen.blit(png_change_fov, (where_change_fov))
#screen.blit(png_map, (0, 0))
#blit_alpha(png_zoon, png_fov, where_zoon, where_fov, 100)
#更新界面
pygame.display.flip()
#动作延迟
pygame.time.delay(10)
|
|