如何在多边形上获得 Y 位置
How get an Y position on a Polygon
我在 Java 的 2d 游戏中有一个多边形。如何从多边形上的给定 X 位置获得多边形上的 Y 位置。
见图:
我想把球员放在十字架上,但我不知道如何得到多边形上的 Y 位置。
这里有更多信息,多边形的类型为 http://docs.oracle.com/javase/7/docs/api/java/awt/Polygon.html。
创建方式如下:
private void paintGround(Graphics2D g2d){
int width = gameBoard.getWidth(); //1000
int height = gameBoard.getHeight(); //750
int xCoords[] = {0,0,width/2,width,width};
int yCoords[] = {height,height/2,height/2-100,height/2,height};
g2d.setColor(Color.white);
Polygon polygon = new Polygon(xCoords, yCoords,5);
g2d.fillPolygon(polygon);
}
感谢您的宝贵时间,对于愚蠢的问题深表歉意:)
这里是 git,如果有人感兴趣的话:
https://github.com/davli921/Smrow.git
这里有一个更通用的解决方案,用于获取两个顶点之间特定点的高度:
- 将“山脉”定义为数组,其中 indices 代表
X
值,实际 contents 代表Y
(身高)值。
- 使用此信息根据“玩家”的当前
X
值计算 Y 位置。
- 画出结果。
以下示例已在 Javascript 中实现,因此任何人都可以在浏览器中轻松试用,但无论您使用何种语言,原理都是相同的。首先我们需要定义一些基本的HTML,这样我们就有了一个canvas可以绘制到:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
<canvas id="game_canvas" width="400" height="300">You must enable Javascript</canvas>
<script src="game.js"></script>
</body>
</html>
现在,这是重要的部分 - Javascript:
"use strict";
// This series of points represents the "height" values of the landscape.
var points = [10, 50, 150, 20, 100, 10];
// Let's pick a random X position...
var x = Math.random() * (points.length-1);
// We can get the height at a given point by interpolating the vertices:
var v1 = points[Math.floor(x)];
var v2 = points[Math.ceil(x)];
var y = v1 + ((v2-v1) * (x % 1.0));
// Now let's draw the "game" state...
var canvas = document.getElementById("game_canvas");
var ctx = canvas.getContext("2d");
var x_scale = canvas.width / points.length;
// This is the "world"...
ctx.moveTo(0, points[0]);
for (var p = 1; p < points.length; ++p) { ctx.lineTo(x_scale * p, points[p]); }
ctx.stroke();
// ...and this is the "player".
ctx.fillStyle = "red";
ctx.fillRect((x * x_scale)-4, y-4, 8, 8);
将这些文件保存到本地文件夹(确保 JS 文件保存为 game.js
)并在浏览器中打开 HTML 文件:
按 F5 刷新页面(从而选择一个新的随机 X
位置)。
我在 Java 的 2d 游戏中有一个多边形。如何从多边形上的给定 X 位置获得多边形上的 Y 位置。
见图:
我想把球员放在十字架上,但我不知道如何得到多边形上的 Y 位置。
这里有更多信息,多边形的类型为 http://docs.oracle.com/javase/7/docs/api/java/awt/Polygon.html。
创建方式如下:
private void paintGround(Graphics2D g2d){
int width = gameBoard.getWidth(); //1000
int height = gameBoard.getHeight(); //750
int xCoords[] = {0,0,width/2,width,width};
int yCoords[] = {height,height/2,height/2-100,height/2,height};
g2d.setColor(Color.white);
Polygon polygon = new Polygon(xCoords, yCoords,5);
g2d.fillPolygon(polygon);
}
感谢您的宝贵时间,对于愚蠢的问题深表歉意:)
这里是 git,如果有人感兴趣的话: https://github.com/davli921/Smrow.git
这里有一个更通用的解决方案,用于获取两个顶点之间特定点的高度:
- 将“山脉”定义为数组,其中 indices 代表
X
值,实际 contents 代表Y
(身高)值。 - 使用此信息根据“玩家”的当前
X
值计算 Y 位置。 - 画出结果。
以下示例已在 Javascript 中实现,因此任何人都可以在浏览器中轻松试用,但无论您使用何种语言,原理都是相同的。首先我们需要定义一些基本的HTML,这样我们就有了一个canvas可以绘制到:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
<canvas id="game_canvas" width="400" height="300">You must enable Javascript</canvas>
<script src="game.js"></script>
</body>
</html>
现在,这是重要的部分 - Javascript:
"use strict";
// This series of points represents the "height" values of the landscape.
var points = [10, 50, 150, 20, 100, 10];
// Let's pick a random X position...
var x = Math.random() * (points.length-1);
// We can get the height at a given point by interpolating the vertices:
var v1 = points[Math.floor(x)];
var v2 = points[Math.ceil(x)];
var y = v1 + ((v2-v1) * (x % 1.0));
// Now let's draw the "game" state...
var canvas = document.getElementById("game_canvas");
var ctx = canvas.getContext("2d");
var x_scale = canvas.width / points.length;
// This is the "world"...
ctx.moveTo(0, points[0]);
for (var p = 1; p < points.length; ++p) { ctx.lineTo(x_scale * p, points[p]); }
ctx.stroke();
// ...and this is the "player".
ctx.fillStyle = "red";
ctx.fillRect((x * x_scale)-4, y-4, 8, 8);
将这些文件保存到本地文件夹(确保 JS 文件保存为 game.js
)并在浏览器中打开 HTML 文件:
按 F5 刷新页面(从而选择一个新的随机 X
位置)。