-1

pygame で衝突検出を実装しようとしています。x方向(左右)から壁にぶつかると完璧に機能します。残念ながら、y 方向から (上下から) 壁にぶつかると機能しません。プレイヤーが y 方向から壁にぶつかるたびに、スタックします。Google と stackoverflow で同様の質問を探しましたが、満足のいく答えが見つかりませんでした。

私のコード:

import pygame
class Player(pygame.sprite.Sprite):
        change_x = 0
        change_y = 0
        def __init__(self,x,y):
                pygame.sprite.Sprite.__init__(self) 
                self.image = pygame.image.load("Cool_guy.png").convert()
                self.rect = self.image.get_rect()
                self.rect.x = x
                self.rect.y = y

        def changespeed(self,x,y):
                self.change_x+=x
                self.change_y+=y


        def update(self,walls):
                #updates location of x coordinate
                old_x = self.rect.x
                new_x = self.change_x + old_x
                self.rect.x = new_x
                collide = pygame.sprite.spritecollide(self,walls,False)
                if collide:
                        #Hit a wall go back to old position
                        self.rect.x = old_x
                #updates location of y coordinate
                old_y = self.rect.y
                new_y =  self.change_y+old_y
                self.rect.y = new_y
                if collide:
                        #hit a wall go back to old positon
                        self.rect.y = old_y

問題はこのクラスにあると思われるため、上記のこのコードは単なる私の Player クラスです (おそらく私の update 関数)。さらにコードが必要な場合は、質問を編集します。Python 3.x を使用しています

4

1 に答える 1

1

x と y の両方を一度に処理すれば、より簡単になり、コードを修正することさえできると思います。

def update(self,walls):
    old_x = self.rect.x
    new_x = self.change_x + old_x
    old_y = self.rect.y
    new_y = self.change_y + old_y
    self.rect.x = new_x
    self.rect.y = new_y
    collide = pygame.sprite.spritecollide(self,walls,False)
    if collide:
            #Hit a wall go back to old position
            self.rect.x = old_x
            self.rect.y = old_y
    #updates location of x and y coordinates
于 2013-07-20T15:10:06.187 に答える