我有過一個for循環中運行一個類似的瓦片地圖:刪除精靈在Pygame的
def Draw_Level(x, y, column, obsticles, entities, image_cache):
#Grass#
if column == "G":
g = Grass(x, y, image_cache)
entities.add(g)
#Plain Grass#
elif column == "P":
p = Plain_Grass(x,y, image_cache)
entities.add(p)
#Grass with yellow flower#
elif column == "F":
f = Grass_Flower(x,y, image_cache)
entities.add(f)
#Grass To Sand (50/50 split block) Direct#
elif column == "Y":
q = Grass_To_SandD(x,y, image_cache)
entities.add(q)
#Example If a class
class Grass(Entity):
def __init__(self, x, y, image_cache):
Entity.__init__(self)
self.image = functions.get_image("data/images/Grass.png", image_cache)
self.image.convert()
self.rect = Rect(x, y, 32, 32)
說,例如,我的鼠標被點擊其中的一個,而x和y決心最接近的32(這是塊的寬度和高度)。我將如何確定點擊哪個精靈?例如,如果我點擊了「草地」塊,並將該草地塊的座標繪製到屏幕上,我該如何刪除它?
的entites =持有的所有實體
有沒有一種方法,我可以從實體列表稱它爲列表?它混淆了我通過列表調用Rect,所以這就是爲什麼我卡住了:S。
Thankyou,我設法得到它。另外,感謝關於命中測試的信息。 – ReallyGoodPie
不客氣。請注意,這可以通過預先計算x和y邊界並將它們存儲在實體中來加速。同樣明智的是,如果鼠標x,y在包圍它們的(虛構)邊界框之外,則可以將相同的邏輯應用於堆疊在一起的整個組。這被稱爲「[微不足道的拒絕]」(http://www.expertsmind.com/questions/trivial-rejection-case-of-cohen-sutherland-line-clippings-30149795.aspx)「並用於行剪切。 – martineau