2015-04-03 47 views
0

我試圖讓Python的V2.7一個簡單的遊戲(就像一個danmaku射手)之間Python v2.7。 pygame的。差異在像素尺寸image.load和image.fill

我有問題,這部分

import os 
from pygame import * 

MOVE_SPEED = 3 
WIDTH = 10 
HEIGHT = 10 
COLOR = "#F52525" 

class Player(sprite.Sprite): 
    def __init__(self, x, y): 
     sprite.Sprite.__init__(self) 
     self.xvel = 0 
     self.yvel = 0 
     self.startX = x 
     self.startY = y 
     self.image = Surface((WIDTH,HEIGHT)) 
     #self.image.fill(Color(COLOR)) 
     self.image = image.load("images/player.png") 
     self.rect = Rect(x, y, WIDTH, HEIGHT) 

「player.png」大小是40x60,但我需要在圖像中心的實際大小爲10x10的矩形,它將與遊戲邏輯交互(可選擇是否顯示)。

回答

1

所以我想你想縮小圖像? - 沒有

編輯

您需要抵消圖紙和碰撞rect

-------- (x,y)   drawing 
|\  | 
| \-- |  (x+15,y+25) rect 
| -- |  (10,10) 
|  | 
--------   (40,60) 

所以基本上想要的碰撞對圖像內發生。 https://www.pygame.org/docs/ref/sprite.html#pygame.sprite.collide_rect

def interact(something, player): 
    # note both Sprites must have a rect attributes 
    return pygame.sprite.collide_rect(something,player) 
+0

謝謝你的評論。不,它只是將圖像縮小到10x10。我想得到類似的東西http://en.touhouwiki.net/images/a/a0/Th11Hitbox.png 我想我會嘗試使用精靈而不是單個圖像可能... – 2015-04-03 13:23:01

+0

所以你需要裁剪10x10的40x60圖像? – corn3lius 2015-04-03 13:28:09

+0

不需要。例如,我需要在矩形的頂部顯示一張圖片,這個圖片位於圖片的中心。所以我們會得到一張40x60的圖片,這只是一個視覺效果,裏面是10x10的矩形。如果你會碰撞與塊圖片 - 一切正常,但如果矩形與塊 - 你輸了。玩家的圖片,遊戲邏輯和編程的矩形。 – 2015-04-03 13:38:49

0

你可能知道,每個精靈組成的image(這是畫的表面上)和rect對象(設置image的位置和區域衝突檢測)。

你可以在你的player類中創建一個rect對象...

self.collideRect = pygame.rect.Rect((0, 0), (10, 10)) 

...並設置它的位置

self.collideRect.center = self.rect.center 

你改變你的player必須調用位置每次這條線也是如此,因此您的self.collideRect矩形對象「移動」與您的player o屏幕。

爲了測試點(如鼠標座標)是self.collideRect裏面,叫

if self.collideRect.collidepoint(x, y) == True: 
    print("You clicked on me!") 

我希望這有助於:)

0

您需要blit的使用矩形的說法:

screen.blit(image, dest, (x_crop, y_crop, width, height)) 

如果你想使用中心,你應該定義圖像功能blit(screen, dest)

screen.blit(self.image, dest, self.rect) 
+0

他的問題的標題是誤導性的。他想要在40x60中畫出整個圖像,但只能在中心10x10上進行碰撞。 – corn3lius 2015-04-06 17:48:10

+0

我非常抱歉,因爲我誤導了標題。我不知道如何只做中心碰撞(我不使用'pygame.sprites')。我應該刪除答案嗎? – knowledge 2015-04-07 15:47:43

+1

我覺得@elegent有一個很好的答案,我總是把這些問題當作學習練習。 'pygame.sprites'有一個用於碰撞的'rect'和一個用於繪製的'image'。你的答案在剪切空間中的圖像時確實有用。我最初提到要縮放圖像,這就是爲什麼我編輯了我的答案。 – corn3lius 2015-04-07 16:12:58