求解,非45度菱形地图怎么求点击的菱形块

大神能不能再写个菱形转世界坐标

大神真的给你跪了,这个好高端

菱形转屏幕也很简单,直接反向应用矩阵就可以了

// 地图坐标转屏幕坐标
mapToScreen(point) {
	// 上下压缩的角度
	const scale = 70;
	// 旋转的角度
	const angle = 45;

	// 换算弧度
	let rad = -(Math.PI * angle) / 180;

	// 旋转矩阵
	let rotateMatrix = [Math.cos(rad), -Math.sin(rad), Math.sin(rad), Math.cos(rad)];

	// 缩放矩阵
	let contractMatrix = [1, 0, 0, 1 / (scale / 90)];

	// 先应用压缩矩阵,再应用旋转矩阵
	return this.matrix2d(this.matrix2d(point, contractMatrix), rotateMatrix);
}

// 屏幕坐标转地图坐标
screenToMap(point) {
	// 上下压缩的角度
	const scale = 70;
	// 旋转的角度
	const angle = 45;

	// 换算弧度
	let rad = (Math.PI * angle) / 180;

	// 旋转矩阵
	let rotateMatrix = [Math.cos(rad), -Math.sin(rad), Math.sin(rad), Math.cos(rad)];

	// 缩放矩阵
	let contractMatrix = [1, 0, 0, scale / 90];

	// 先应用旋转矩阵,再应用压缩矩阵
	return this.matrix2d(this.matrix2d(point, rotateMatrix), contractMatrix);
}

// 为点应用单个矩阵
matrix2d(vec2, mat2) {
	let x = vec2.x * mat2[0] + vec2.y * mat2[1];
	let y = vec2.x * mat2[2] + vec2.y * mat2[3];
	return new cc.Vec2(x, y);
}
2赞

马克下,有空来研究

大神我给你跪了,一直很佩服算法很强的人

大神,我的菱形地块是44块,这个在这里怎么写

N=int(x/TileW - y/TileH)
M=int(x/TileW + y/TileH)


终于解决了,其实这个算法能行,大神提供的矩阵个人理解不了。

马克下

这个东西 能用白话在解释一下吗?:joy: 表示没看懂

mark.
矩阵变换一下。

找个矩阵变换的教程看看自然就会啦,计算机图形学基础 :grin:

请问你的是瓦片地图实现的吗

不是,自己写算法

mark

mark

mark一下

mark

N M表示什么???

这个问题想复杂了,想解决这个问题,看这里的链接https://forum.cocos.org/t/rpg-slg/90542。
别说45度菱形了,其它任何角度的菱形求解点击块都可以轻松搞定。

运用初中的直线方程计算点到直线的距离不就行了