Saya tidak bisa mengubah Bentuk Kelas saya di PyGame

jadi saya tidak bisa mengubah Bentuk karakter pemain dari persegi panjang menjadi lingkaran. Sebelumnya dikatakan ada satu argumen yang hilang jadi kami menambahkannya dan kemudian dikatakan ada satu argumen yang terlalu banyak. Sekarang ia mengatakan sesuatu yang berbeda yang saya tidak ingat lagi, bisakah orang lain melihat kode yang diberikan.

Terima kasih atas bantuan Anda!

import pygame    
import turtle    
import time    
import math    
import random    
import sys    
import os    
pygame.init()    


WHITE = (255,255,255)    
GREEN = (0,255,0)    
BGColor = (117,168,55)    
RED = (255,0,0)    
BLUE = (0,0,255)    
BLACK = (0,0,0)    
MOVE = 2.5    


size = (1200, 620)    
screen = pygame.display.set_mode(size)    
pygame.display.set_caption("Zombie Game")    


class Char(pygame.sprite.Sprite):    
    def __init__(self, color, pos, radius, width):    
        super().__init__()    
        self.image = pygame.Surface([radius, width])    
        self.image.fill(WHITE)    
        self.image.set_colorkey(WHITE)    
        pygame.draw.circle(self.image, color, [0, 0], radius, width)    
        self.circle = self.image.get_circle()    


    def moveRight(self, pixels):    
        self.rect.x += pixels    

    def moveLeft(self, pixels):    
        self.rect.x -= pixels    

    def moveUp(self, pixels):    
        self.rect.y -= pixels    

    def moveDown(self, pixels):    
        self.rect.y += pixels    


all_sprites_list = pygame.sprite.Group()    

playerChar = Char(BLUE, [0, 0], 30, 0)    
playerChar.rect.x = 0    
playerChar.rect.y = 0    

all_sprites_list.add(playerChar)    

carryOn = True    
clock = pygame.time.Clock()    

while carryOn:    
    for event in pygame.event.get():    
        if event.type==pygame.QUIT:    
            carryOn=False    
        elif event.type==pygame.KEYDOWN:    
            if event.key==pygame.K_x:    
                carryOn=False    

    keys = pygame.key.get_pressed()    
    if keys[pygame.K_a]:    
        playerChar.moveLeft(MOVE)    
    if keys[pygame.K_d]:    
        playerChar.moveRight(MOVE)    
    if keys[pygame.K_w]:    
        playerChar.moveUp(MOVE)    
    if keys[pygame.K_s]:    
        playerChar.moveDown(MOVE)    

    screen.fill(BGColor)    
    pygame.display.flip()    
    clock.tick(60)    
pygame.quit()    

person Nope.X    schedule 14.02.2019    source sumber
comment
Harap berikan Contoh Minimal, Lengkap, dan Dapat Diverifikasi yang menunjukkan masalah Anda.   -  person darksinge    schedule 15.02.2019


Jawaban (1)


Jika Anda ingin menggambar lingkaran dengan jari-jari ke permukaan, maka Anda harus membuat permukaan dengan lebar dan tinggi jari-jari dua kali lipat:

self.image = pygame.Surface([radius*2, radius*2]) 

Agar kelas tetap berfungsi, Anda masih harus menyetel anggota self.rect:

self.rect = self.image.get_rect()

Terakhir, permukaannya menjadi blit ke screen Permukaan:

screen.blit(playerChar.image,playerChar.rect)

Lihat contoh saat saya menerapkan saran pada kode asli Anda:

import pygame    
import turtle    
import time    
import math    
import random    
import sys    
import os    
pygame.init()    

WHITE = (255,255,255)    
GREEN = (0,255,0)    
BGColor = (117,168,55)    
RED = (255,0,0)    
BLUE = (0,0,255)    
BLACK = (0,0,0)    
MOVE = 2.5    

size = (1200, 620)    
screen = pygame.display.set_mode(size)    
pygame.display.set_caption("Zombie Game")    

class Char(pygame.sprite.Sprite):    
    def __init__(self, color, pos, radius, width):    
        super().__init__()    
        self.image = pygame.Surface([radius*2, radius*2])    
        self.image.fill(WHITE)    
        self.image.set_colorkey(WHITE)    
        pygame.draw.circle(self.image, color, [radius, radius], radius, width)   
        self.rect = self.image.get_rect()    

    def moveRight(self, pixels):    
        self.rect.x += pixels
        pass    

    def moveLeft(self, pixels):    
        self.rect.x -= pixels
        pass    

    def moveUp(self, pixels):    
        self.rect.y -= pixels
        pass    

    def moveDown(self, pixels):    
        self.rect.y += pixels
        pass    


all_sprites_list = pygame.sprite.Group()    

playerChar = Char(BLUE, [0, 0], 30, 0)    
playerChar.rect.x = 0    
playerChar.rect.y = 0    

all_sprites_list.add(playerChar)    

carryOn = True    
clock = pygame.time.Clock()    

while carryOn:    
    for event in pygame.event.get():    
        if event.type==pygame.QUIT:    
            carryOn=False    
        elif event.type==pygame.KEYDOWN:    
            if event.key==pygame.K_x:    
                carryOn=False    

    keys = pygame.key.get_pressed()    
    if keys[pygame.K_a]:    
        playerChar.moveLeft(MOVE)    
    if keys[pygame.K_d]:    
        playerChar.moveRight(MOVE)    
    if keys[pygame.K_w]:    
        playerChar.moveUp(MOVE)    
    if keys[pygame.K_s]:    
        playerChar.moveDown(MOVE)    

    screen.fill(BGColor) 
    screen.blit(playerChar.image,playerChar.rect)
    pygame.display.flip()    
    clock.tick(60)    
pygame.quit()    
person Rabbid76    schedule 14.02.2019
comment
Pertama-tama terima kasih banyak! Bagaimana saya sekarang melanjutkan dan menambahkan kelas yang benar-benar baru? Bisakah Anda memberikan contohnya juga? Seperti yang mungkin Anda duga, saya baru saja mulai dengan Python jadi saya lebih suka jawaban umum;) - person Nope.X; 15.02.2019