2017-03-05 21 views
6

Çizmeden önce döndürdüğüm bir resim var. Görüntü bir altıgen açılarıyla döndürülür. Başka bir deyişle, görüntü temel olarak bir altıgenin bireysel kenarlarını "vurgular". Bu döndürülen görüntünün içine farenin tıklanıp tıklanmadığını tespit etmem gerekiyor. Döndürülmemiş bir resmin içine fare tıklaması bulmak oldukça basittir, ancak döndürülen noktalar içindeki tıklamaları nasıl algılayacağımı bilmiyorum. Görüntünün üstündeki görünmeyen bir çokgen yerleştirip Polygon.contains() işlevini kullanabilmem için görüntünün köşelerinin noktalarını döndürmenin bir yolu var mı?Slick2D'deki döndürülen bir görüntüdeki tıklamayı nasıl algılayabilirim?

    Image highlightEdge = new Image("assets/img/highlightEdge.png"); 
        if(angle == 90){ 
         highlightEdge.setCenterOfRotation(highlightEdge.getWidth(), 0); 
         highlightEdge.rotate(new Float(angle)); 
         highlightEdge.draw(testPoint.x - 56, testPoint.y); 
        } else if(angle == 210) { 
         highlightEdge.setCenterOfRotation(0, 0); 
         highlightEdge.rotate(new Float(angle)); 
         highlightEdge.draw(lastSettlement.x - 72, lastSettlement.y - 32); 
        } else if(angle == 330){ 
         highlightEdge.setCenterOfRotation(0, 0); 
         highlightEdge.rotate(new Float(angle)); 
         highlightEdge.draw(lastSettlement.x - 8, lastSettlement.y - 32); 
        } else if(angle == 30){ 
         highlightEdge.setCenterOfRotation(0, 0); 
         highlightEdge.rotate(new Float(angle)); 
         highlightEdge.draw(lastSettlement.x-8, lastSettlement.y); 
        } else if(angle == 150){ 
         highlightEdge.setCenterOfRotation(0, 0); 
         highlightEdge.rotate(new Float(angle)); 
         highlightEdge.draw(lastSettlement.x-72, lastSettlement.y); 
        } else { 
         highlightEdge.setCenterOfRotation(0, 0); 
         highlightEdge.rotate(new Float(angle)); 
         highlightEdge.draw(lastSettlement.x-40, lastSettlement.y - 48); 
        } 

cevap

0

Sen fare içine tıklandığı takdirde algılamak için onun yöntemini contains kullanmak Ardından aynen Image şeklini eşleştirmek için bir Shape oluşturmak ve verebilir.

Eğer Shape bir rotasyon Transform geçerli olabilir dikkate Image dönüşünü almak.

Bunu yapan shapeFromImage yöntemini oluşturdum; bir Image ve konumunu alır ve Shape tekabül verir:

float positionX; 
float positionY; 

if (angle == 90) { 
    highlightEdge.setCenterOfRotation(highlightEdge.getWidth(), 0); 
    highlightEdge.rotate(new Float(angle)); 

    positionX = testPoint.x - 56; 
    positionY = testPoint.y; 

    highlightEdge.draw(positionX, positionY); 
} 

... 

// you can now use this Shape to use its method "contains" 
imageShape = shapeFromImage(highlightEdge, positionX, positionY); 
:

sizin örnekte
/** 
* Returns the Shape of an Image considering its rotation 
* @param image 
* @param x the x position of the Image 
* @param y the y position of the Image 
*/ 
public static Shape shapeFromImage(Image image, float x, float y) { 

    // create a rectangle with same position and size of the image 
    Shape imageShape = new Rectangle(x, y, image.getWidth(), image.getHeight()); 

    // get the rotation angle of the image 
    float angle = image.getRotation(); 

    // if the image is rotated, we also need to rotate our shape 
    if (angle != 0.f) { 

     // convert the rotation angle in radians to use in Transform 
     float angleInRadians = (float) Math.toRadians(angle); 

     // get the point of rotation to use in Transform. 
     // image.getCenterOfRotation returns a point relative to the image. 
     // for Transform we need an absolute point, so we add the image position to it 
     float rotationX = image.getCenterOfRotationX() + x; 
     float rotationY = image.getCenterOfRotationY() + y; 

     // create the rotation Transform to match the image rotation 
     Transform rotationTransform = Transform.createRotateTransform(angleInRadians, rotationX, rotationY); 

     // apply the rotation Transform to our shape 
     imageShape = imageShape.transform(rotationTransform); 

    } 

    return imageShape; 
} 

Böyle kullanabilirsin

İlgili konular