Игра на pygame работает под Linux, но не под Windows
Который раз сталкиваюсь с проблемами не работы кода из-под Windows, но прекрасного функционирования в Linux. Имеется главный main.py с некоторыми функциями и player.py. По интерфейсу (счетчик FPS) видно, что игра не зависла и функционирует, но при этом передвижение невозможно, а если тыкнуть по окну pygame, Windows начнет ругатся на то, что игра зависла.
Вот код main.py:
import pygame, math, map, music, loading, keyinput, threading, time
from settings import *
from player import Player
from raycasting import rayCasting
from drawing import Drawing
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("PL: Forbidden Knowlage PRE-ALPHA v0.0.6a-04")
icon = pygame.image.load("appdata/icon.png")
pygame.display.set_icon(icon)
clock = pygame.time.Clock()
drawing = Drawing(screen)
player = Player()
def menu():
global player
try:
menu = pygame.mixer.Sound("appdata/music/mainMenu.ogg")
menu.set_volume(0.4)
menu.play(loops= 1000000)
except:
print("-----No main menu music found or importing can`t be completed-----")
loadGame = drawing.mainMenu(clock)
try:
menu.stop()
except:
pass
if loadGame:
player = loading.loadGame()
playerMap = player.getMap()
map.loadMap(playerMap, player)
else:
map.loadMap(1, player, True)
def gameMusic():
try:
musicDict = music.genMusicDict('appdata/music/inGameMusic/')
if musicDict == None:
raise SystemExit()
while True:
for i in range(musicDict.__len__()):
musicDict[i].play()
musicDict[i].set_volume(0.2)
length = musicDict[i].get_length()
time.sleep(length)
except:
pass
def main():
while True:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
loading.saveGame(player)
pygame.mixer_music.stop()
quit()
player.movement()
map.cahngeMap(player)
keyinput.listenKeys(player)
drawing.background()
drawing.raycast(player.pos, player.angle)
drawing.fps(clock)
drawing.playerPosition(player)
drawing.playerHP(player)
pygame.display.flip()
pygame.display.update()
if __name__ == '__main__':
menu()
gameThread = threading.Thread(target=main)
musicThread = threading.Thread(target=gameMusic, daemon= True)
musicThread.start()
gameThread.start()
Чтобы максимально не осталось вопросов по, к примеру, музыкальному скрипту скажу, что он-то отрабатывает на все бабки. Как и интерфейс.
Вот player.py
from settings import *
import pygame
import math
class Player:
def __init__(self):
print("1")
self.map = 1
self.x, self.y = (0, 0)
self.angle = playerAngle
self.hp = 100
self.maximumHealth = 100
self.hpBarLength = 200
self.hpBarRatio = self.maximumHealth / self.hpBarLength
def pos(self):
return self.x, self.y
def getPos(self):
return [int(self.x), int(self.y)]
def getPosX(self):
return self.x
def getPosY(self):
return self.y
def setPos(self, pos):
self.x, self.y = pos
def getMap(self):
return self.map
def setMap(self, map):
self.map = map
def getHP(self):
return self.hp
def removeHP(self, hp):
if self.hp > 0:
self.hp -= hp
elif self.hp <= 0:
self.hp = 0
def addHP(self, hp):
if self.hp < self.maximumHealth:
self.hp += hp
elif self.hp >= self.maximumHealth:
self.hp = self.maximumHealth
def movement(self):
speedUp = 0
sin_a = math.sin(self.angle)
cos_a = math.cos(self.angle)
keys = pygame.key.get_pressed()
if keys[pygame.K_LSHIFT]:
speedUp = 2
if keys[pygame.K_w]:
print("1")
self.x += (playerSpeed + speedUp) * cos_a
self.y += (playerSpeed + speedUp) * sin_a
if keys[pygame.K_s]:
self.x -= (playerSpeed + speedUp) * cos_a
self.y -= (playerSpeed + speedUp) * sin_a
if keys[pygame.K_a]:
self.angle -= angleCoeff
if keys[pygame.K_d]:
self.angle += angleCoeff