2013-10-12 2 views
1

Итак, я пытаюсь создать игру-головоломку с Python и Pygame, но у меня немного проблемы. Как сделать детектор столкновения, когда я использую blitted изображение для основного символа, а не прямое изображение? Я знаю, что у прямых изображений есть функции слева, справа, сверху и снизу (что было бы чрезвычайно полезно для обнаружения столкновений), но есть ли что-то подобное для блистающего изображения? Или мне просто нужно создать переменную для координат x и y + ширину/высоту изображения? Я пробовал это с использованиемОбнаружение столкновений Pygame

import pygame, sys 
from pygame.locals import * 

WINDOWWIDTH = 400 
WINDOWHEIGHT = 300 
WHITE = (255, 255, 255) 
catImg = pygame.image.load('cat.png') 
catx = 0 
caty = 0 
catRight = catx + 100 
catBot = caty + 100 

moveRight = False 

pygame.init() 


FPS = 40 # frames per second setting 
fpsClock = pygame.time.Clock() 

# set up the window 
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32) 
pygame.display.set_caption('Animation') 


while True: # the main game loop 
    DISPLAYSURF.fill(WHITE) 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == KEYDOWN: 
      if event.key in (K_RIGHT, K_w): 
       moveRight = True 

     elif event.type == KEYUP: 
      if event.key in (K_RIGHT, K_w): 
       moveRight = False 

    if catRight == WINDOWWIDTH: 
     moveRight = False 
    if moveRight == True: 
     catx += 5 

    DISPLAYSURF.blit(catImg, (catx, caty)) 


    pygame.display.update() 
    fpsClock.tick(FPS) 

Но catImg просто продолжал идти прямо за окном. Что я делаю не так? Заранее спасибо.

ответ

0

Чтобы предотвратить смещение изображения с правого края, вам необходимо вычислить максимальное значение, которое может иметь его координата x, и убедитесь, что значение никогда не превышалось. Поэтому перед циклом создать переменную со значением в нем:

CAT_RIGHT_LIMIT = WINDOWWIDTH - catImg.get_width() 

А затем в цикле проверить это:

if catx >= CAT_RIGHT_LIMIT: 
    moveRight = False 
    catx = CAT_RIGHT_LIMIT 
if moveRight == True: 
    catx += 5 

Вы можете, конечно, расширить эту идею до всех остальных ребер.

+0

О, благодарю, это именно то, что я искал, я не знал, что catImg.get_width() существует. Вы отлично решили мою проблему. – user2874724

+0

Я не знал, что 'get_width()' существует, то есть до тех пор, пока я не прочитаю [документацию] (http://pygame.org/docs/ref/surface.html). – martineau

0
if catRight >= WINDOWWIDTH: 
     moveRight = False 
     catright = WINDOWHEIGHT 
    if moveRight == True: 
     catx += 5 

Я думаю, что вот где ваша ошибка.

Смежные вопросы