小甲鱼pygame81讲中退出全屏BUG,求解
import pygameimport sys
from pygame.locals import *
pygame.init()
listmode = pygame.display.list_modes()
size = width,height = 600,400
speed = [-2,1]
bg = (255,255,255)
fullscreen = False
screen = pygame.display.set_mode(size,RESIZABLE)
pygame.display.set_caption('word game')
turtle = pygame.image.load('btn_tili.png')
position = turtle.get_rect()
l_head = turtle
r_head = pygame.transform.flip(turtle,True,False)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
turtle = l_head
speed = [-1,0]
if event.key == K_RIGHT:
turtle = r_head
speed =
if event.key == K_UP:
speed =
if event.key == K_DOWN:
speed =
#全屏(F11)
if event.key == K_F11:
fullscreen = not fullscreen
if fullscreen:
screen = pygame.display.set_mode((listmode),FULLSCREEN|HWSURFACE)
width,height = listmode
else:
screen = pygame.display.set_mode(size)
if event.type == VIDEORESIZE:
size == event.size
width,height = size
screen = pygame.display.set_mode(size,RESIZABLE)
position = position.move(speed)
if position.left < 0 or position.right > width:
turtle = pygame.transform.flip(turtle,True,False)
speed = -speed
if position.top < 0 or position.bottom > height:
speed = -speed
screen.fill(bg)
screen.blit(turtle,position)
pygame.display.flip()
pygame.time.delay(10)
标红的为全屏的代码
当乌龟跑超过了 width,height = 600,400;再退出全屏游戏就会报错,请问如何优化这个BUG? 有点忘了, 应该可以检测点击全屏和退出全屏的按钮, 提供一个思路, 我记得是可行的
if 全屏按钮:
if 全屏状态:
重置小乌龟位置
重置游戏框大小 白two 发表于 2022-5-22 10:51
有点忘了, 应该可以检测点击全屏和退出全屏的按钮, 提供一个思路, 我记得是可行的
这个逻辑我知道,但是写了不行,不知道为什么 这是我以前写的, 你参考一下
import pygame
import sys
from pygame.constants import *
def change_pos(position, width, height):
if position.right > width:
position.right = width
if position.bottom > height:
position.bottom = height
pygame.init()
# size = width, height = (600, 400)
size = width, height = (1536, 864)
speed =
bg = (255, 255, 255)
clock = pygame.time.Clock()
screen = pygame.display.set_mode(size, RESIZABLE)
pygame.display.set_caption("初次见面,请多多关照!")
# post the turtle
turtle = pygame.image.load(r"D:\user\Desktop\pyPractice\game\turtle\turtle.png").convert_alpha()
position = turtle.get_rect()
for i in range(position.width):
for j in range(position.height):
at = turtle.get_at((i, j))
if at > 100 and at > 200 and at > 100:
at = 0
turtle.set_at((i, j),at)
turtle_right = pygame.transform.rotate(turtle, 90)
turtle_top = pygame.transform.rotate(turtle, 90*2)
turtle_left = pygame.transform.rotate(turtle, 90*3)
turtle_bottom = turtle
turtle = turtle_top
fullscreen = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == VIDEORESIZE:
if (event.size < 200):
event.size = (200, event.size)
size = event.size
width, height = size
screen = pygame.display.set_mode(size, RESIZABLE)
change_pos(position, width, height)
if (event.size < 200):
event.size = (event.size, 200)
size = event.size
width, height = size
screen = pygame.display.set_mode(size, RESIZABLE)
change_pos(position, width, height)
else:
size = event.size
width, height = size
screen = pygame.display.set_mode(size, RESIZABLE)
change_pos(position, width, height)
if event.type == KEYDOWN:
if event.key == pygame.K_F11:
fullscreen = not fullscreen
if fullscreen:
# size = width, height = pygame.display.list_modes()
size = width, height = (1536, 864)
screen = pygame.display.set_mode(size, pygame.HWSURFACE)
else:
size = width, height = (600, 400)
screen = pygame.display.set_mode(size)
change_pos(position, width, height)
position = position.move(speed)
if position.right > width:
turtle = turtle_right
position = turtle_rect = turtle.get_rect()
position.right = width
speed =
if position.bottom > height:
turtle = turtle_bottom
position = turtle_rect = turtle.get_rect()
position.right = width
position.bottom = height
speed = [-5, 0]
if position.left < 0:
turtle = turtle_left
position = turtle_rect = turtle.get_rect()
position.bottom = height
speed =
if position.top < 0:
turtle = turtle_top
position = turtle_rect = turtle.get_rect()
speed =
screen.fill(bg)
screen.blit(turtle, position)
pygame.display.flip()
pygame.time.delay(10)
clock.tick(200)
白two 发表于 2022-5-23 12:13
这是我以前写的, 你参考一下
import pygame
import sys
from pygame.locals import *
from pygame.constants import *
pygame.init()
size = width,height= 600,400
speed =
bg = (255,255,255) #RGB颜色
fullscreen = False
screen = pygame.display.set_mode(size,RESIZABLE)
pygame.display.set_caption('word game')
turtle = pygame.image.load('btn_tili.png').convert_alpha()
position = turtle.get_rect()
l_head = turtle
r_head = pygame.transform.flip(turtle,True,False)
def change_pos(position, width, height):
if position.right > width:
position.right = width
if position.bottom > height:
position.bottom = height
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
turtle = l_head
speed = [-1,0]
if event.key == K_RIGHT:
turtle = r_head
speed =
if event.key == K_UP:
speed =
if event.key == K_DOWN:
speed =
#全屏(F11)
if event.key == K_F11:
fullscreen = not fullscreen
if fullscreen:
listmode = pygame.display.list_modes()
width, height =listmode
screen = pygame.display.set_mode((listmode),pygame.FULLSCREEN)
else:
size = width, height = (600, 400)
screen = pygame.display.set_mode(size)
change_pos(position, width, height)
if event.type == VIDEORESIZE:
size == event.size
width,height = size
screen = pygame.display.set_mode(size,RESIZABLE)
position = position.move(speed)
if position.left < 0 or position.right > width:
turtle = pygame.transform.flip(turtle,True,False)
speed = -speed
if position.top < 0 or position.bottom > height:
speed = -speed
screen.fill(bg)
screen.blit(turtle,position)
pygame.display.flip()
pygame.time.delay(10)
按照你这个调了缩小可以了,但是还有一个BUG F11,只可以按一次,退出后第二次按就不可以全屏,这个是什么原因?
页:
[1]