有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Slick2D创建圆弧?

我似乎不知道如何用Slick2D创建圆弧。基本上我想把它保存为一个对象,这样我就可以用它进行碰撞检测,但Slick2D只有一个g.drawArc()函数

我曾考虑过使用Arc2D,它非常适合我的需要,但我不知道如何使用它来绘制Arc2D

以下是我想要的模型:

mockup

这很容易用Arc2D完成,然后用jFrame来绘制,但我不知道如何用slick创建这样的东西

编辑:我认为我能做的解决方案是使用Arc2D进行所有碰撞检测,然后使用myArc。x、 myArc。y、 myArc。宽度等,但Arc2D不能使用。Interests()函数,用于平滑的2D形状,其他地方都可以使用

我创建了一种基于曲线创建近似圆弧的方法

public Curve createArc(float centerX, float centerY, float radius, float theta){
        // creates a 180 degree arc around centerX and Y, theta (in  degrees) is used for rotation

    float x1,x2,x3,x4,y1,y2,y3,y4;

    x1 = (float) (radius*(1-Math.cos(Math.toRadians(theta)))) + startX - radius;
    y1 = (float) (radius*(1-Math.sin(Math.toRadians(theta)))) + startY - radius;

    x2 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.cos(Math.toRadians(theta-36.87-90))))  + startX;
    y2 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.sin(Math.toRadians(theta-36.87-90)))) + startY;

    x3 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.cos(Math.toRadians(theta-53.13))))  + startX;
    y3 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.sin(Math.toRadians(theta-53.13)))) + startY;

    x4 = (float) (radius*(1-Math.cos(Math.toRadians(theta+180)))) - radius + startX;
    y4 = (float) (radius*(1-Math.sin(Math.toRadians(theta+180)))) - radius + startY;



    Vector2f vectorTest1 = new Vector2f(x1,y1);
    Vector2f vectorTest2 = new Vector2f(x2,y2);
    Vector2f vectorTest3 = new Vector2f(x3,y3);
    Vector2f vectorTest4 = new Vector2f(x4,y4);


    Curve curve = new Curve(vectorTest1,vectorTest2,vectorTest3,vectorTest4);

    return curve;
}

共 (1) 个答案

  1. # 1 楼答案

    嘿,你可以用Slick2D创建各种不同的形状。你可以在这里看到它们:

    http://slick.ninjacave.com/javadoc/org/newdawn/slick/geom/package-summary.html

    它们都继承自形状,并共享相同的方法(例如intersects())

    没有特定的圆弧形状,但您可以使用曲线或多边形(或其他形状)。例如,你可以做:

        org.newdawn.slick.geom.Curve myCurve = new org.newdawn.slick.geom.Curve(10f, 5f, 9f, 4f);
    

    创造一个奇怪的曲线。只需阅读文档并四处玩一下

    在渲染方法中,可以调用g.drawArc(myCurve),也可以直接调用myCurve上的drawing方法(myCurve.draw())

    我相信,如果你阅读了文档,并对坐标进行了一些调整,你一定能够做到这一点

    此外,如果创建一个新类并让它继承Shape,则可以在Slick2D中创建自己的形状