回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图为我的游戏做一个用户界面,有一些曲线到用户界面。现在我可以检测到两个曲面之间的碰撞。我可以通过像素检测两个精灵之间的位置,但似乎鼠标通过像素检测是在暗示我。基本上,我想检测鼠标在UI上的时间,然后在获取UI时忽略下面的所有内容。在</p>
<p>这是我目前所掌握的情况的一张照片。如果你注意到粉红色的方块,鼠标在GUI上,而黄色的选择框在一个平铺上。黄色选择器是一个框框在一个平铺。在</p>
<p>我在openGL中使用pygame,但是现在我正在寻找解决方案。我可以很容易地适应,因为我对编程并不陌生,而且几乎在寻找任何解决方案。
我也会张贴的代码,但要张贴很多代码,所以如果具体的东西是需要的,让我知道。在</p>
<p>需要注意的一点是,GUI是可伸缩的,因为左上角区域将滑入和滑出。此外,白色只是占位符,所以最终颜色不使用,将很难检查。当按z顺序单击时,是否可以获得鼠标下的表面元素?在</p>
<p><strong>纹理</strong></p>
<pre><code>import pygame
from OpenGL.GL import *
from OpenGL.GLU import *
class Texture(object):
image = None
rect = None
src = ''
x = 0
y = 0
'''
zOrder Layers
0 - background
1 -
2 -
3 - Tile Selector
s - Tiles
5 -
6 -
7 - Panels
8 - Main Menu
9 - GUI Buttons
10 -
'''
def __init__(self, src):
self.src = src
self.image = pygame.image.load(src)
self.image.set_colorkey(pygame.Color(255,0,255,0))
self.rect = self.image.get_rect()
texdata = pygame.image.tostring(self.image,"RGBA",0)
# create an object textures
self.texid = glGenTextures(1)
# bind object textures
glBindTexture(GL_TEXTURE_2D, self.texid)
# set texture filters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
# Create texture image
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,self.rect.w,self.rect.h,0,GL_RGBA,GL_UNSIGNED_BYTE,texdata)
self.newList = glGenLists(2)
glNewList(self.newList, GL_COMPILE)
glBindTexture(GL_TEXTURE_2D, self.texid)
glBegin(GL_QUADS)
glTexCoord2f(0, 0); glVertex3f(0, 0 ,0)
glTexCoord2f(0, 1); glVertex3f(0, self.rect.h, 0)
glTexCoord2f(1, 1); glVertex3f(self.rect.w, self.rect.h, 0)
glTexCoord2f(1, 0); glVertex3f(self.rect.w, 0, 0)
glEnd()
glEndList()
def getImg(self):
return self.image
def getPos(self):
rect = self.getImg().get_rect()
pos = dict(x=self.x,y=self.y,w=rect[2],h=rect[3])
return pos
def draw(self,x,y,rotate=0):
glLoadIdentity()
self.x = int(x)
self.y = int(y-self.rect.h+32)
glTranslatef(x,y-self.rect.h+32,0)
glPushAttrib(GL_TRANSFORM_BIT)
glMatrixMode(GL_TEXTURE)
glLoadIdentity()
glRotatef(rotate,0,0,1)
glPopAttrib()
if glIsList(self.newList):
glCallList(self.newList)
</code></pre>
<p><strong>gui类</strong></p>
^{pr2}$
<p><img src="https://i.stack.imgur.com/7sq7Z.png" alt="pygame"/></p>