2017-08-19 6 views
1

J'essaie de faire un jeu simple et ça fonctionne bien. Le mouvement est comme le mouvement d'un bloc de tetris (instantanément, comme la téléportation) et c'est ce que je veux. Je ne veux pas de mouvement fluide, je veux ce style de mouvement.Comment puis-je implémenter des limites ou des collisions pour ce style de mouvement?

Mais il y a un problème ... Quand j'essaie d'ajouter des limites ou des collisions pour mon personnage et rect, ça ne marche pas, mais si j'écris ce code, ça ne marche qu'une fois et ensuite la gauche et la droite La clé ne fonctionne plus. Comment puis-je résoudre ce problème?

import pygame 
pygame.init() 

ekranx = 160 
ekrany = 310 
window = pygame.display.set_mode((ekranx, ekrany)) 
white = (255,255,255) 
black = (0,0,0) 
blue = (0,0,200) 
pygame.display.set_caption("TOP") 
clock = pygame.time.Clock() 
ball = pygame.image.load("top.png") 


def top(x,y): 
    window.blit(ball,(x,y)) 
top_x = (55) 
top_y = (250) 
cikis = False 
while not cikis: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      cikis = True 
     if event.type == pygame.KEYDOWN: 
       #--SOL 
       if event.key == pygame.K_LEFT: 
        top_x += -50 


       #--SAĞ 
       if event.key == pygame.K_RIGHT: 
        top_x += 50 


    #print(event) 
    window.fill(white) 
    top(top_x,top_y) 
    pygame.draw.rect(window,blue,(5,5,150,300),5) 
    if top_x < 6: 
     pygame.K_LEFT = False 
    if top_x > 104: 
     pygame.K_RIGHT = False 
    pygame.display.update() 
    clock.tick(60) 
pygame.quit() 
quit() 
+0

Ne pas poster des captures d'écran de votre code, ajoutez le code directement au poste sous la forme d'un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve). Collez simplement le code dans la question, sélectionnez-le et appuyez sur Ctrl-K. – skrx

Répondre

1

pygame.K_LEFT = False < - Ne fais pas ça. Vous remplacez la constante pygame.K_LEFT ici (qui est en fait un entier 276) ici et cela signifie que vous ne pouvez plus l'utiliser dans votre programme (pygame ne reconnaîtra plus ces événements).

Il suffit de définir top_x à la valeur minimale ou maximale si la balle se déplace trop à gauche ou à droite:

if top_x < 6: 
    top_x = 6 
if top_x > 104: 
    top_x = 104 
+0

merci beaucoup, skrx. vous l'avez réparé !!! je suis apprécié. Merci beaucoup!! –

+0

Je vous recommande également de vérifier comment fonctionne ['pygame.Rect'] (http://www.pygame.org/docs/ref/rect.html), si vous avez besoin d'une détection de collision. – skrx

+0

merci pour votre aide. par la façon dont je veux créer un menu de démarrage (codes même) mais je ne pouvais pas le faire. J'ai essayé beaucoup de façons, mais je ne pouvais pas. comment puis-je faire un menu de démarrage. ce sera un écran blanc complet et démarrer ou quitter les boutons? –