Drehen Sie das Bild um die Mitte mit Pygame [Duplikat]Python

Python-Programme
Anonymous
 Drehen Sie das Bild um die Mitte mit Pygame [Duplikat]

Post by Anonymous »

Ich mache ein Spiel in Pygame und versuche, ein Waffenbild um meinen Spieler um zu drehen, aber derzeit dreht sich das Bild um die obere linke Ecke des Bildes. Daher liegt die einzige korrekte Rotation bei θ = 90, -90 und ist bei θ = 0,180 falsch (umgedreht auf den Spieler anstelle von weg). Ich weiß nicht, wie ich diesen Fehler beheben kann. < /P>

Code: Select all

gun.py

Code: Select all

import pygame
import math

pygame.init()

class Gun:
def __init__(self, screen, size_multiplier=2):
self.screen_width = screen.get_width()
self.screen_height = screen.get_height()
self.original_gun_img = pygame.image.load("images/gun.png").convert_alpha()
original_width, original_height = self.original_gun_img.get_size()
new_width = int(original_width * size_multiplier)
new_height = int(original_height * size_multiplier)
self.gun_img = pygame.transform.scale(self.original_gun_img, (new_width, new_height))
self.gun_rect = self.gun_img.get_rect()
self.gun_pos = pygame.Vector2(self.screen_width / 2, self.screen_height / 2)
self.gun_distance = 32
self.speed = 300
self.dt = 0
self.angle = 0
self.rotated_gun_img = self.gun_img

@staticmethod
def rot_center(image, angle):
orig_rect = image.get_rect()
rot_image = pygame.transform.rotate(image, angle)
rot_rect = rot_image.get_rect()
rot_rect.center = orig_rect.center
return rot_image, rot_rect

def move(self, player_pos: pygame.Vector2):
mouse_pos = pygame.mouse.get_pos()

direction = pygame.Vector2(mouse_pos) - player_pos

if direction.length() != 0:
direction = direction.normalize()

self.gun_pos = player_pos + direction * self.gun_distance

angle = math.degrees(math.atan2(direction.y, direction.x))

if angle != self.angle:
self.angle = angle
self.rotated_gun_img, self.gun_rect = self.rot_center(self.gun_img, self.angle)

self.gun_rect.center = self.gun_pos

def draw(self, screen):
screen.blit(self.rotated_gun_img, self.gun_rect)
< /code>
player.py

Code: Select all

import pygame
from gun import Gun

pygame.init()

class Player:
def __init__(self, screen, size_multiplier=2):
self.screen = screen
self.screen_width = screen.get_width()
self.screen_height = screen.get_height()
self.player_img = pygame.image.load("images/player.png").convert_alpha()
original_width, original_height = self.player_img.get_size()
new_width = int(original_width * size_multiplier)
new_height = int(original_height * size_multiplier)
self.player_img = pygame.transform.scale(self.player_img, (new_width, new_height))
self.player_rect = self.player_img.get_rect()
self.player_pos = pygame.Vector2(self.screen_width / 2, self.screen_height / 2)
self.speed = 300
self.dt = 0
self.gun = Gun(screen)

def move(self, dt):
self.keys = pygame.key.get_pressed()

if self.keys[pygame.K_w]:
if self.player_pos.y - self.player_rect.height / 2 > 0:
self.player_pos.y -= self.speed * dt

if self.keys[pygame.K_s]:
if self.player_pos.y + self.player_rect.height / 2 < self.screen_height:
self.player_pos.y += self.speed * dt

if self.keys[pygame.K_a]:
if self.player_pos.x - self.player_rect.width / 2 > 0:
self.player_pos.x -= self.speed * dt

if self.keys[pygame.K_d]:
if self.player_pos.x + self.player_rect.width / 2 <  self.screen_width:
self.player_pos.x += self.speed * dt

def draw(self, screen):
self.player_rect.center = (self.player_pos.x, self.player_pos.y)
screen.blit(self.player_img, self.player_rect)
self.gun.move(self.player_pos)
self.gun.draw(screen)
< /code>
main.py
import pygame
from player import Player
from gun import Gun

pygame.init()
screen = pygame.display.set_mode((480, 360))
clock = pygame.time.Clock()
running = True
dt = 0

player = Player(screen)

while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

screen.fill("purple")

dt = clock.tick(60) / 1000

player.move(dt)
player.draw(screen)

pygame.display.flip()

pygame.quit()
< /code>
I tried adjusting the angle by adding to it at certain degrees, but it just reversed the problem. I've asked ChatGPT to see if it could fix the issue, but it results in the same problem, unable to fix the issue. I tried using solutions from similar problems, but to no avail.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post