2016-10-30 6 views
0

私はPygameで一致するカードゲームを作ろうとしています.52枚のカードをすべて正しい位置に描画できますが、画像のrectは変更されません。Pygame画像の衝突点を変更する方法

次の方法ですべてのカードの表面を作成します。

def generateGrid(): 
    cardB = pygame.image.load(os.path.join('data', 'back.png')) 
    for i in range(index): 
      grid.append(cardB) 
      grid[i] = pygame.transform.scale(cardB, (85,130)) 

メインカードのメソッドで次のコードを呼び出してカードをレンダリングします。

generateGrid() 
pos = 25 

for i in range(index): 
    print(pos) 
    if i >0 and i< 14: 
     r1 = grid[i].get_rect() 
     r1.move_ip(pos,50) 
     pos +=95 
     background.blit(grid[i], r1) 
     pygame.display.update() 
    elif i >0 and i<27: 
     r2 = grid[i].get_rect() 
     pos -=95 
     r2.move_ip(pos,195) 
     background.blit(grid[i], r2) 
     pygame.display.update() 
    elif i >0 and i <40: 
     r3 = grid[i].get_rect() 
     r3.move_ip(pos,350) 
     pos +=95 

     background.blit(grid[i],r3) 
     pygame.display.update() 
    elif i >0 and i< 53: 
     r4 = grid[i].get_rect() 
     pos -=95 
     r4.move_ip(pos,500) 
     background.blit(grid[i],r4) 
     pygame.display.update() 
    print("Card", i+1, "rendered") 

は最後に、私はマウスが行うことでオーバーホバリングされているカードを探してみてください私のメインループの中で:<rect(0, 0, 85, 130)>

for i in range(index): 
    if grid[i].get_rect().collidepoint(pygame.mouse.get_pos()): 
     print("Colling with:", i) 
    else: 
     pass 

私の問題は、すべての面が同じ衝突rectsを持っているということです。各カードのコーディネートに合わせてこれをどのように変更できますか?

答えて

0

gridの画像に関連付けられた四角形は、カードをレンダリングするコードがどこに配置されているかを反映していないため問題があります。これは、これらの情報が含まれている矩形の並行リストを作成することで修正できます。この追加のリストがcardPosn命名された場合は、ここではそれが作成できる方法は次のとおりです。

pos = 25 
cardPosn = [None] * len(grid) # preallocate 
for i in range(index): 
    print(pos) 
    if 0 < i < 14: 
     r1 = grid[i].get_rect() 
     r1.move_ip(pos, 50) 
     pos += 95 
     background.blit(grid[i], r1) 
     cardPosn[i] = r1 
     pygame.display.update() 
    elif 0 < i < 27: 
     r2 = grid[i].get_rect() 
     pos -= 95 
     r2.move_ip(pos, 195) 
     background.blit(grid[i], r2) 
     cardPosn[i] = r2 
     pygame.display.update() 
    elif 0 < i < 40: 
     r3 = grid[i].get_rect() 
     r3.move_ip(pos, 350) 
     pos += 95 
     background.blit(grid[i], r3) 
     cardPosn[i] = r3 
     pygame.display.update() 
    elif 0 < i < 53: 
     r4 = grid[i].get_rect() 
     pos -= 95 
     r4.move_ip(pos, 500) 
     background.blit(grid[i], r4) 
     cardPosn[i] = r4 
     pygame.display.update() 
    print("Card", i+1, "rendered") 

ことを行うのならば、衝突点をチェックするループは次のように記述できます。

mouse_pos = pygame.mouse.get_pos() 
for i in range(index): 
    if cardPosn[i] and cardPosn[i].collidepoint(mouse_pos): 
     print("Colliding with:", i)