2013-06-01 42 views
3

我有两个图像,一个是僵尸,另一个是僵尸将有10%机会产生的刀片。我想定位刀片,以便它将右手重叠僵尸。如果僵尸的宽度与宽度相同,但我认为它可以做到这一点,但因为它是62x55,所以一切都变得更加复杂。那现在定位在刀片和僵尸的代码如下所示:将图像定位在旋转图像中

at = new AffineTransform(); 
angle = Math.atan2(player.getY() - zombie.getY(), player.getX() - zombie.getX()) + (Math.PI/2); 
at.setToTranslation(zombie.getX(), zombie.getY()); 
at.rotate(angle, zombie.getWidth()/2, zombie.getHeight()/2); 
g2d.drawImage(zombie.getBrImage(),at,this); 
ImageIcon ii = new ImageIcon("Blade.png"); 
Image image = ii.getImage(); 
int x = (int) Math.round(zombie.getX() + 47 * Math.sqrt(2) * Math.cos(angle - Math.PI/4)); 
int y = (int) Math.round(zombie.getY() + 47 * Math.sqrt(2) * Math.sin(angle - Math.PI/4)); 
at.setToTranslation(x, y); 
at.rotate(angle, zombie.getWidth()/2, zombie.getHeight()/2); 
g2d.drawImage(image, at, this); 

这将产生以下结果:

currentbladepos

正如你所看到的,刀片被定位在较高的ÿ (如果你计算0作为屏幕的顶部,就会降低y),因为僵尸会旋转,所以它总是面对玩家,我不能只是改变数字47,因为那时刀片不会正常旋转。

那么我将如何使刀片总是被正确定位,这样无论僵尸面对什么角度,它总会产生以下结果?

bladepos

+0

僵尸旋转任何程度? – Will

+0

你可以发布多一点的代码? – Will

+0

什么是数字“47”?即使它通常是常量,通常使用变量来使其更易于阅读和更改 –

回答

0

你可以有两个图像:

  • 一个没有刀片(Img1
  • 一个与刀片(Img2):以僵尸和刀片,以及在合成它开始,例如在构造函数中。

然后,你可以只说:

if (randomValue < 0.10) { zombieImg = Img1 } else { zombieImg = Img2}

然后就是翻译/旋转/等。初始化后的ZombieImg

您认为如何? :-)