我最近发现了一个使用pygame制作的漂亮小迷宫,我有一个想法:我想用以下方法替换所有那些丑陋的矩形:
我已经尝试了一些东西,但每次尝试时我都有错误(我不能在这里发布代码,因为当我尝试上传它时有一个错误,它告诉我,我没有把4个缩进但是我做了......)
有人可以指出我正确的方向吗? 这是原始游戏的链接:
http://www.pygame.org/project-Rect+Collision+Response-1061-.html
import pygame
import random
from pygame.locals import *
类Joueur(对象):
def _init_(self):
self.rect = pygame.image.load("perso.png").convert_alpha()
def mvmt(self, dx, dy):
#déplacement sur un axe a la fois avec detection de collision / Move each axis separately. Note that this checks for collisions both times.
if dx !=0:
self.mvmt_axe(dx, 0)
if dy !=0:
self.mvmt_axe(0, dy)
def mvmt_axe(self, dx, dy):
self.rect.x +=dx
self.rect.y +=dy
# Action en cas de collision / If you collide with a wall, move out based on velocity
for mur in murs :
if self.rect.colliderect(mur.rect):
if dx > 0 :
self.rect.right = mur.rect.left
if dx < 0 :
self.rect.left = mur.rect.right
if dy > 0 :
self.rect.bottom = mur.rect.top
if dy < 0 :
self.rect.top = mur.rect.bottom
答案 0 :(得分:1)
Dropbox显示了一个类Mur,但问题中的代码没有。我根据你在评论中显示的错误和我在dropbox中看到的代码回答。差异似乎是自我正确的定义。
但是,请重新检查您正在执行的代码。错误显示
回溯(最近一次调用最后一次):文件“C:\ Users \ Maxime \ ISN 2014 \ Dropbox \ Deadalus \ Partie Maxime \ proto collision.py”,第74行,在Mur((x,y))TypeError: object()不带参数
这似乎意味着您在第40行定义self.rect时所做的更改已经充分改变了定义,使Mur不再接受呼叫设置。请检查原始代码是否也能正常工作。还要检查保管箱中的第74行是否正在运行
Mur(x, y)
和
Mur((x, y))
与足以导致失败。
在您的代码中
#Classe mur / Class for the wall ( it will be represented by a small .png
class Mur(object):
def _init_(self, pos):
murs.append(self)
# Put in a print statement here
self.rect = pygame.image.load("mur.png").convert_alpha() # line 40
第74行
#Création du niveau après 'lecture' des murs / Parse the level string above. M = wall, S = exit line 69
x = y = 0 # This is line 70
for rangée in niveau: # This is line 71
for colonne in rangée: # This is line 72
if colonne == "M": # This is line 73
Mur((x, y)) # This is line 74 and is the error
if colonnne == "S":
end_rect = pygame.Rect(x, y, 30, 30)
x += 30
y += 30
x = 0
我将Dropbox与原始
进行了比较类Wall(对象):
def __init__(self, pos):
walls.append(self)
self.rect = pygame.Rect(pos[0], pos[1], 16, 16)
# Parse the level string above. W = wall, E = exit
x = y = 0
for row in level:
for col in row:
if col == "W":
Wall((x, y))
if col == "E":
end_rect = pygame.Rect(x, y, 16, 16)
x += 16
y += 16
x = 0