目标:知道什么时候一个精灵点击/主动用鼠标如何检测鼠标和精灵之间的碰撞/鼠标悬停?
使用:Python的3.2 64位,pygame的1.92 64位,64位Windows 7
我花了6个小时无果......我尝试:
s.rect.collidepoint(pygame.mouse.get_pos())
s.collidepoint(pygame.mouse.get_pos())
s.sprite.spritecollide(pygame.mouse.get_pos())
s.spritecollide(pygame.mouse.get_pos())
s.sprite.collide_rect(pygame.mouse.get_pos())
s.collide_rect(pygame.mouse.get_pos())
我也试着转动鼠标的位置,我真的不想做,就像是有人在这里提到的其他在另一个岗位,为雪碧和碰撞一样,具有相同的结果; (
我能够succ essfully鼠标与图像相撞,但只要我把图像变成一个精灵类,它就成了一场噩梦......精灵类有什么问题?或者我是在浪费时间试图使用精灵来制作漂亮的碰撞特征,而只是使用rect碰撞的图像呢?
保持于获取AttributeError的: '谢尔顿' 对象没有属性 '矩形'(s.Rect.collidepoint) 或AttributeError的: '元组' 对象没有属性 'collidepoint'(s.collidepoint) 或AttributeError的: 'Rake'对象没有属性'sprite'(s.sprite.collidepoint)
由于我是python/pygame的新手,我应该将这个检测放在Sprite类本身的Update/Render方法中,或者我使用错误的事件轮询?
我没有打扰试图重新编码鼠标按下/上/拖动,因为我甚至无法获得鼠标悬停到
希望这一次的工作后得到一个工作响应......别人没“T;(
感谢您的帮助
代码:
import pygame
from pygame import *
from pygame.locals import *
from pygame.sprite import *
class Sheldon(Sprite):
def __init__(self):
Sprite.__init__(self)
self.image = transform.scale(image.load('sheldon.jpg').convert(),(230,310))
self.rect = self.image.get_rect()
class Rake(Sprite):
def __init__(self):
Sprite.__init__(self)
self.image = transform.scale(image.load('rake.jpg').convert(),(230,310))
self.rect = self.image.get_rect()
class Sprite_Mouse_Location(Sprite):
def __init__(self,x,y):
Sprite.__init__(self)
self.rect = pygame.Rect(x,y,1,1)
print(self.rect)
pygame.init()
window = display.set_mode((800,600))
sheldon = Sheldon()
sheldon.rect = (10,10)
all_sprites = Group(sheldon)
rake = Rake()
rake.rect = (400,250)
all_sprites.add(rake)
x,y = pygame.mouse.get_pos()
mouse_sprite = Sprite_Mouse_Location(x,y)
running = True
while running == True:
for event in pygame.event.get():
if event.type == QUIT or event.type == KEYUP and event.key == K_ESCAPE :
pygame.quit()
elif event.type == MOUSEMOTION :
for s in all_sprites :
if pygame.sprite.collide_rect(s,mouse_sprite):
print("hit")
window.fill((0,0,0))
all_sprites.update()
all_sprites.draw(window)
display.update()
你必须使用[pygame.Rect()](http://www.pygame.org/docs/ref/rect.html) – furas
我没有,但它不工作要么,但也许我有使用元组而不是(x,y,w,h)?我再次尝试self.rect.collidepoint(x,y),但仍然无法让它工作...反正它现在是固定的;) –