0
Ich versuche, eine Kollision in einem Läufer Spiel Prototyp zu simulieren. Das Problem ist mein logisches, um die Bewegung des Charakters zu stoppen und mit dem Objekt zu interagieren.Pygame Kollision Interaktion logisch
Ich habe so viele Dinge ausprobiert, aber nichts.
hier ist mein Code: das Problem am Ende ist
import pygame
import os
pygame.init()
screen = pygame.display.set_mode((400,300))
pygame.display.set_caption("shield hacking")
JogoAtivo = True
GAME_BEGIN = False
run =True
jumping =True;
# Speed in pixels per frame
speedX = 0
speedY = 0
cordX = 10;
cordY = 150;
groundX=0;
groundY=200;
verify = open('verify_continue.txt' , "r");
sound_trigger=False
def loadCoords():
f1 = open("coords.txt", "r")
text=f1.read()
num_list=text.split()
print (num_list)
cordX=num_list[0]
print(cordX)
cordY=num_list[1]
f1.close()
return cordX,cordY
def copiaArquivo(cordX, cordY):
x=str(cordX);
y=" "+str(cordY);
f1 = open('coords.txt', "w")
f1.write(x);
f2 = open('coords.txt', "w")
f2.seek(2)
f2.write(y);
f1.close()
f2.close()
def draw():
screen.fill((0, 0, 0))
ground = pygame.draw.rect(screen, (0, 255, 0), (groundX, groundY,400, 10))
square = pygame.draw.rect(screen, (255, 0, 0), (cordX, cordY ,50, 50))
enemy = pygame.draw.rect(screen, (255, 0, 155), (200, 150 ,50, 50));
pygame.display.flip();
""" SCREEN(press START) """
font = pygame.font.SysFont(None, 55);
text = font.render("Press A to Start", 1, (255, 0, 0));
screen.blit(text,(50,20));
pygame.display.update();
while JogoAtivo:
for evento in pygame.event.get():
print(evento)
#verifica se o evento que veio eh para fechar a janela
if evento.type == pygame.QUIT:
JogoAtivo = False
copiaArquivo(cordX, cordY);
pygame.quit();
if evento.type == pygame.KEYDOWN:
if evento.key == pygame.K_a:
print('GAME BEGIN')
GAME_BEGIN = True
sound_trigger = False
if verify.read()=="S":
cordX,cordY=loadCoords();
cordX = float(cordX);
cordY = float(cordY);
pygame.mixer.init();
if sound_trigger == True:
sound1 = pygame.mixer.Sound('GunsNRoses_ParadiseRemix_xD.wav');
chan1 = pygame.mixer.find_channel()
chan1.queue(sound1);
if evento.key == pygame.K_LEFT:
speedX=-0.025
run= True;
if evento.key == pygame.K_RIGHT:
speedX=0.025
run= True;
if evento.key == pygame.K_SPACE:
print("x ", cordX)
print("y " ,cordY)
speedY=-0.3
jumping= True;
if sound_trigger == True:
sound2 = pygame.mixer.Sound('MMX2_SE_00019.wav');
chan2 = pygame.mixer.find_channel();
chan2.queue(sound2);
if evento.type == pygame.KEYUP:
if evento.key == pygame.K_SPACE:
speedY=+0.2
if GAME_BEGIN:
draw();
if run == True:
cordX+=speedX
if jumping == True:
cordY+=speedY
"""square = pygame.draw.rect(screen, (255, 0, 0), (cordX, cordY ,50, 50))
enemy = pygame.draw.rect(screen, (255, 0, 155), (200, 150 ,50, 50));"""
"""ground detection"""
if cordY +50>= groundY:
speedY=0
#PROBLEM HERE:
"""i think to use colliderRect() method could be easier"""
if cordX+50 <=200 or cordX >=250: #200 and 250 == object X coords
cordY+=speedY;
cordX+=speedX;
elif cordX + 50 >=200 and cordX <=250 and cordY >=150:
speedX=0;
elif cordX + 50 >=200 and cordX <=250 and cordY + 50 >=150:
speedY=0;
"""if cordX + 50 >=200 and cordX +50 <=250 and cordY >= 100:
speedY=0;"""
Verwendung 'pygame.Rect()' zu halten Position und Größe des Objekts. Und dann können Sie 'rect.x',' rect.y', 'rect.right' (=' rect.x + rect.width'), 'rect.left',' rect.top', rect.bottom verwenden (= 'rect.y + rect.height') usw. und' rect.colliderect (other_rect) ',' rect.collidepoint (mouse_position) 'und' pygame.draw.rect (screen, (255,0,0), rect) '. Übrigens: Sie müssen 'pygame.draw.rect()' nicht der Variablen zuweisen, wenn Sie diese Variable später nicht verwenden. – furas
BTW: Python braucht nicht ';' – furas
warum öffnest du die gleiche Datei zweimal, um zwei Elemente zu schreiben - öffne einmal und benutze 'write()' zwei mal. – furas