Java的graphics对象在Flashgames中

怎样才能(使用标准的Java2D引擎)使用像graphics对象这样的小精灵?

对于那些不知道我的意思的人来说,在Facebook这样的Flash游戏中,他们在屏幕上放置了一些对鼠标和点击作出反应的小精灵。 我试图在Java中做同样的事情,但找不到一个好方法。 Swing组件总是遍布整个位图,但是我只想在鼠标位于不透明的像素上时,从对象中获得反应。

所以基本上每次检查鼠标下面的对象是否包含一个不透明的像素(我相信在gameloop或repaint循环中可能会非常强烈)。 我不知道如何有效地实现这样的事情。

每帧检查一个像素是否透明是否真的很昂贵? 当然,你只检查光标是否在精灵边界框内。

假设你使用BufferedImage保存你的图像数据,你可以沿着这个(对不起,代码真的不是确切的,查看BufferedImage是如何工作的):

image.getRaster().getPixel(x, y, array); alpha = array[4] if (alpha > 0.5f) { ... 

区域可用于形状之间的操作(如加和减)。 用一个尽可能less的矩形覆盖一个区域的algorithm是相当容易的(如果你不希望它有最好的解决scheme)。 覆盖所有不透明的像素,留下透明的像素。 使用Area类将它们统一到单个path中。 但是,我认为检查透明度的精灵是更有效的。

你可以尝试一个缩小的边界框。 假设你有一个20×20像素精灵,在边界周围有2像素的透明度。 设置一个18×18像素边界框,并检查每个缓冲区更新的末尾,如果鼠标指针坐标包含在边界框坐标中。

你可以使用PulpCore,一个轻巧的2D框架,它可以让你很容易地使用精灵:

http://www.interactivepulp.com/pulpcore/