游戏空间坐标转GUI屏幕坐标计算问题求助
游戏空间到屏幕空间坐标转换问题求助
我用JavaScript开发自制游戏引擎,多数功能运行正常,但遇到了游戏空间(game space)坐标转换为屏幕空间(screen space)坐标的问题。
相机类中计算实体屏幕位置的现有代码
draw(Engine, Entity, FollowEntity){ var x = Entity.render_position.x - (FollowEntity.render_position.x - Engine.rendersize.x / 2) - (Entity._get_render_size().x / 2); var y = Entity.render_position.y - (FollowEntity.render_position.y - Engine.rendersize.y / 2) - (Entity._get_render_size().y / 2); var _x = Entity.render_position.x - (FollowEntity.render_position.x - Engine.rendersize.x / 2); var _y = Entity.render_position.y - (FollowEntity.render_position.y - Engine.rendersize.y / 2); Engine.ctx.save(); Engine.ctx.translate(_x, _y); Engine.ctx.rotate(Entity.rotation * Math.PI / 180); Engine.ctx.translate(-_x, -_y); Engine.ctx.drawImage(Engine.rasterizer.get_cached_img(Entity), x, y); /**/ Engine.ctx.restore(); }
我尝试过的转换代码
尝试1
// 计算实体在游戏世界中的位置 var gameX = this.ContextEntity.position.x; var gameY = this.ContextEntity.position.y; // 计算相机在游戏世界中的位置 var cameraX = this.Engine.follow_entity.position.x; var cameraY = this.Engine.follow_entity.position.y; // 计算实体在屏幕上的位置,考虑游戏实体与GUI元素的像素尺寸差异 var screenX = (gameX - cameraX) * this.GUI.rasterizer.pixel_size / this.Engine.rasterizer.pixel_size; var screenY = (gameY - cameraY) * this.GUI.rasterizer.pixel_size / this.Engine.rasterizer.pixel_size; // 调整实体屏幕位置以适配实体尺寸 screenX -= this.ContextEntity._get_render_size().x / 2; screenY -= this.ContextEntity._get_render_size().y / 2;
尝试2
gameToScreen(game) { var game1 = (typeof game.x !== 'undefined') ? game.x : game[0]; var game2 = (typeof game.y !== 'undefined') ? game.y : game[1]; var x = game1 - (this.control_entity._get_render_midpoint().x - (this.rendersize.x / 2)) / this.rasterizer.pixel_size; var y = game2 - (this.control_entity._get_render_midpoint().y - (this.rendersize.y / 2)) / this.rasterizer.pixel_size; return new Vec2(Math.floor(x), Math.floor(y)); }
另外,之前有一个尝试方法仅在引擎实体的像素乘数为0时有效。
内容的提问来源于stack exchange,提问作者Nik Hendricks
相关产品推荐
相关产品推荐

