2017-08-19 29 views
1

我正在尝试做一个简单的游戏,它运行良好。这个动作就像是俄罗斯方块的移动(就像瞬移一样),这就是我想要的。我不想流畅的运动,我想要这种运动风格。如何为这种运动风格实现边界或碰撞?

但有一个问题...当我尝试为我的角色和矩形添加边界或碰撞时,它不起作用,但是如果我编写此代码,它只能工作一次,然后左右两个箭头钥匙不再工作了。我怎么解决这个问题?

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

不要发布您的代码的截图,直接的形式添加代码后[最小,完整和可验证的示例](https://stackoverflow.com/help/mcve)。只需将代码粘贴到问题中,选择它并按下Ctrl-K即可。 – skrx

回答

1

pygame.K_LEFT = False < - 不要这样做。你在这里覆盖pygame.K_LEFT常量(实际上是一个整数276),这意味着你不能在你的程序中使用它(pygame不会再识别这些事件)。

只需设置top_x到最大值或最小值,如果球移动太远向左或向右:

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

非常感谢你,skrx。你修好了!即时赞赏。万分感谢!! –

+0

如果您需要碰撞检测,我还建议查看['pygame.Rect'](http://www.pygame.org/docs/ref/rect.html)的工作方式。 – skrx

+0

感谢您的全力帮助。顺便说一句,我想创建一个开始菜单(代码相同),但我无法做到。我尝试了很多方法,但我不能。我怎么做一个开始菜单。它将是一个完整的白色屏幕和开始或退出按钮? –