如何使用 Slick2D 创建圆弧?
How to create an arc with Slick2D?
我似乎无法弄清楚如何使用 Slick2D 创建圆弧。基本上我希望能够将它保存为一个对象,这样我就可以用它进行碰撞检测,但是 Slick2D 只有一个 g.drawArc() 函数。
我考虑过使用 Arc2D,它非常适合我的需要,但我不知道如何巧妙地绘制 Arc2D。
这是我想要的样机:
使用 Arc2D 然后使用 jFrame 绘制它很容易,但我不知道如何使用 slick 创建这样的东西。
编辑:我看到我能做的解决方案是只使用 Arc2D 进行所有碰撞检测,然后只使用 myArc.x、myArc.y、myArc.width 等。当我需要使用 g.drawArc() 绘制圆弧时,但 Arc2D 无法将 .interesects() 函数与 slick2d 形状一起使用,这些形状在其他任何地方都使用。
我创建了一种基于曲线创建近似圆弧的方法
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;
}
嘿,您可以使用 Slick2D 创建各种不同的形状。你可以在这里看到它们:
http://slick.ninjacave.com/javadoc/org/newdawn/slick/geom/package-summary.html
它们都继承自 shape 并共享相同的方法(例如 intersects());
没有特定的弧形,但您可以使用曲线或多边形(或其他形状)。所以例如你可以简单地做:
org.newdawn.slick.geom.Curve myCurve = new org.newdawn.slick.geom.Curve(10f, 5f, 9f, 4f);
创建一条看起来很奇怪的曲线。只需阅读文档并尝试一下。
在您的渲染方法中,您可以调用 g.drawArc(myCurve) 或直接调用 myCurve 上的绘图方法 (myCurve.draw());
我相信如果您阅读文档并稍微了解一下坐标,您一定能够做到这一点。
此外,如果您创建一个新的 class 并让它从 Shape 继承,您可以在 Slick2D 中创建自己的 Shapes。
我似乎无法弄清楚如何使用 Slick2D 创建圆弧。基本上我希望能够将它保存为一个对象,这样我就可以用它进行碰撞检测,但是 Slick2D 只有一个 g.drawArc() 函数。
我考虑过使用 Arc2D,它非常适合我的需要,但我不知道如何巧妙地绘制 Arc2D。
这是我想要的样机:
使用 Arc2D 然后使用 jFrame 绘制它很容易,但我不知道如何使用 slick 创建这样的东西。
编辑:我看到我能做的解决方案是只使用 Arc2D 进行所有碰撞检测,然后只使用 myArc.x、myArc.y、myArc.width 等。当我需要使用 g.drawArc() 绘制圆弧时,但 Arc2D 无法将 .interesects() 函数与 slick2d 形状一起使用,这些形状在其他任何地方都使用。
我创建了一种基于曲线创建近似圆弧的方法
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;
}
嘿,您可以使用 Slick2D 创建各种不同的形状。你可以在这里看到它们:
http://slick.ninjacave.com/javadoc/org/newdawn/slick/geom/package-summary.html
它们都继承自 shape 并共享相同的方法(例如 intersects());
没有特定的弧形,但您可以使用曲线或多边形(或其他形状)。所以例如你可以简单地做:
org.newdawn.slick.geom.Curve myCurve = new org.newdawn.slick.geom.Curve(10f, 5f, 9f, 4f);
创建一条看起来很奇怪的曲线。只需阅读文档并尝试一下。
在您的渲染方法中,您可以调用 g.drawArc(myCurve) 或直接调用 myCurve 上的绘图方法 (myCurve.draw());
我相信如果您阅读文档并稍微了解一下坐标,您一定能够做到这一点。
此外,如果您创建一个新的 class 并让它从 Shape 继承,您可以在 Slick2D 中创建自己的 Shapes。