首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用InputEventScreenTouch缩放时TileMap坐标错误

问题:使用InputEventScreenTouch缩放时TileMap坐标错误。

回答: InputEventScreenTouch是Godot游戏引擎中的一个输入事件,用于处理屏幕触摸事件。在应用程序中使用InputEventScreenTouch进行缩放TileMap时,出现了坐标错误的问题。

TileMap是一种在游戏中用于创建地图的2D网格,并且可以在网格上放置各种元素,例如地面、墙壁、道具等。当我们想要对TileMap进行缩放时,通常会根据触摸事件的位置来确定缩放的中心点,并根据缩放比例来调整TileMap的大小。

然而,当使用InputEventScreenTouch进行缩放时,可能会出现坐标错误的情况。这通常是因为在计算缩放比例时,没有考虑到TileMap的当前位置和缩放中心点的参考坐标系不一致导致的。

为了解决这个问题,我们需要进行以下步骤:

  1. 获取触摸事件的位置坐标。
  2. 将触摸事件的位置坐标转换为TileMap节点的本地坐标系。
  3. 根据转换后的坐标计算缩放比例,并将其应用于TileMap节点。
  4. 更新TileMap的位置,使其保持在缩放中心点位置不变。

以下是一个示例代码,用于处理InputEventScreenTouch缩放TileMap时的坐标错误问题:

代码语言:txt
复制
extends Node2D

var initial_scale = Vector2(1, 1)
var zoom_speed = 0.1

func _ready():
    set_process_input(true)

func _input(event):
    if event is InputEventScreenTouch:
        if event.type == InputEventScreenTouch.MOVE:
            if event.pressed:
                initial_scale = get_scale()
            
            var current_scale = initial_scale * (1 + event.relative.x * zoom_speed)
            set_scale(current_scale)
            
            var tilemap_size = get_node("TileMap").get_cell_size()
            var zoom_center = event.position - position
            var zoom_offset = (tilemap_size * current_scale - tilemap_size * initial_scale) / 2
            var new_position = event.position - zoom_center + zoom_offset
            set_position(new_position)

在以上示例中,我们使用了相对触摸事件的位置来计算缩放比例,并将其应用于TileMap节点。然后,我们计算缩放中心点的偏移量,并将TileMap的位置调整到正确的位置。

这样,当使用InputEventScreenTouch进行缩放时,就可以避免TileMap坐标错误的问题。

腾讯云相关产品推荐:如果您在使用Godot游戏引擎进行开发,并希望将游戏部署到云平台上,可以考虑使用腾讯云的云服务器CVM(产品介绍链接:https://cloud.tencent.com/product/cvm)、云数据库MySQL(产品介绍链接:https://cloud.tencent.com/product/cdb_mysql)、云存储COS(产品介绍链接:https://cloud.tencent.com/product/cos)等产品。这些产品可以提供稳定可靠的基础设施支持,帮助您构建和管理云计算环境,以便于部署和运行您的Godot游戏应用程序。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 使用PyTorch,最常见的4个错误

    导读 这4个错误,我敢说大部分人都犯过,希望能给大家一点提醒。 最常见的神经网络错误:1)你没有首先尝试过拟合单个batch。2)你忘了为网络设置train/eval模式。...直到我们完成,StopIteration被触发。在这个循环中,我们只需要调用next, next, next… 。...在运行脚本并查看MissingLink dashobard的准确性,请记住这一点。 在这个特定的例子中,似乎每50次迭代就会降低准确度。...常用的错误 3: 忘记在.backward()之前进行.zero_grad() 当在 “loss”张量上调用 “backward” ,你是在告诉PyTorch从loss往回走,并计算每个权重对损失的影响有多少...在backward的时候不使用zero_grad的一个原因是,如果你每次调用step() 都要多次调用backward,例如,如果你每个batch只能将一个样本放入内存中,那么一个梯度会噪声太大,你想要在每个

    1.6K30

    使用React Hooks 要避免的5个错误

    首页 专栏 javascript 文章详情 0 使用React Hooks 要避免的5个错误! ?...很有可能你已经读过很多关于如何使用React Hook 的文章。但有时候,知道何时不使用与知道如何使用同样重要。 在这篇文章中,主要介绍一下 React hooks 错误使用方式,以及如何解决它们。...有条件地执行 Hook 可能会导致难以调试的意外错误。React Hook的内部工作方式要求组件在渲染之间总是以相同的顺序调用 Hook。...2.不要使用过时状态 下面的组件MyIncreaser在单击按钮增加状态变量count: function MyIncreaser() { const [count, setCount] = useState...我们来看看一个使用useEffect(callback, deps) 而忘记正确设置依赖关系创建的过时闭包的例子。

    4.2K30

    使用 React Hooks 要避免的6个错误

    image.png 今天来看看在使用React hooks的一些坑,以及如何正确的使用避免这些坑。...问题概览: 不要改变 hooks 的调用顺序; 不要使用旧的状态; 不要创建旧的闭包; 不要忘记清理副作用; 不要在不需要重新渲染使用useState; 不要缺少useEffect依赖。 1....因为当id为空,组件会提示,并直接退出。如果id存在,就会调用useState和useEffect这两个hook。这样有条件的执行钩子时就可能会导致意外并且难以调试的错误。...不要在不需要重新渲染使用useState 在React hooks 中,我们可以使用useState hook来进行状态的管理。虽然使用起来比较简单,但是如果使用不恰当,就可能会出现意想不到的问题。...可以看到,状态变量counter并没有在渲染阶段使用。所以,每次点击第一个按钮,都会有不需要的重新渲染。 ​

    2.4K00

    30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    当你在Tilemap组件中添加或移除tileTilemap Collider 2D会在LateUpdate期间更新Collider形状。 用于为2D游戏场景中的Tilemap添加碰撞体。...它是基于屏幕坐标系而不是世界坐标系来控制UI元素的位置和大小的。 RectTransform组件可以让UI元素相对于父级容器进行缩放、旋转和平移,这使得UI设计师可以更方便地创建自适应的UI布局。...在使用Position As UV1,需要在shader中进行相关的处理,将UV1坐标与贴图进行关联,以实现所需的效果。...需要在shader中进行相关的处理,例如将UV1坐标映射到贴图坐标使用贴图中的像素信息进行计算等。 需要在材质中设置相关的参数,例如贴图、UV1坐标偏移量等,以控制效果。...它是游戏对象的基础组件之一,可以通过修改其属性来实现游戏对象的移动、旋转和缩放等操作。其中,位置属性控制游戏对象的世界坐标,旋转属性控制游戏对象的旋转角度,缩放属性控制游戏对象的缩放比例。

    2.6K35

    【JS】1170- 5 个使用 Promise 的常见错误

    因此,许多人在实践中往往会犯错误。 在本文中,介绍一下使用 promise 的五个常见错误,希望大家能够避免这些错误。 1、避免 Promise 回调地狱 通常,Promise是用来避免回调地狱。...try/catch 块 通常情况下,我们使用 try/catch 块来处理错误。...当我们在一个函数声明前使用 async 关键字,它会返回一个 Promise,我们可以使用 await 关键字来停止代码,直到我们正在等待的Promise解决或拒绝。...假设我们想在Promise 块中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。...答案就是使用函数。函数是一种耗时的机制。只有当开发者明确地用 () 来调用它们,它们才会执行。简单地定义一个函数还不能让我们得到什么。

    99020

    使用 Promise 的5个常见错误,你占了几个!

    因此,许多人在实践中往往会犯错误。 在本文中,介绍一下使用 promise 的五个常见错误,希望大家能够避免这些错误。 1.避免 Promise 地狱 通常,Promise是用来避免回调地狱。...在 Promise 中使用 try/catch 块 通常情况下,我们使用 try/catch 块来处理错误。然而,不建议在 Promise 对象中使用try/catch 。...当我们在一个函数声明前使用 async 关键字,它会返回一个 Promise,我们可以使用 await 关键字来停止代码,直到我们正在等待的Promise解决或拒绝。...假设我们想在Promise 块中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。...答案就是使用函数。函数是一种耗时的机制。只有当开发者明确地用 () 来调用它们,它们才会执行。简单地定义一个函数还不能让我们得到什么。

    68610

    【Unity】手把手入门2D游戏开发教程——小狐狸的冒险(上)

    本篇为前半部分基础内容,包括:控制角色的移动、脚本组件开发、Tilemap使用与地形绘制、地形碰撞器、物理系统(碰撞器、刚体组件等)、角色的回血与掉血触发、预制体等。 接下来正式开始我们的创作旅程。...回到Hierachy目录下,可以看到Ruby、Grid、Tilemap的属性里面,坐标也包括Z轴,虽然是2D,但是实际上Z轴是我们正视的方向。所以也存在层次。...需要控制角色不掉河里,并且支持快速操作的方法,使用Tilemap碰撞器。Tilemap新增Tilemap 2D碰撞器。...Sliced - 这通常用于处理需要九宫格缩放(9-slice scaling)的图像。这种方法可以让你的图像在拉伸保持边缘和角落的完整性,常用于UI元素如按钮和面板。...由于篇幅限制,后半部分,后续择再发布。后半部分内容前瞻:包括动画设置、粒子效果、虚拟相机、武器开发、UGUI、射线检测、音效、打包与发布等。

    13910

    使用多进程库计算科学数据出现内存错误

    问题背景我经常使用爬虫来做数据抓取,多线程爬虫方案是必不可少的,正如我在使用 Python 进行科学计算,需要处理大量存储在 CSV 文件中的数据。.../CSV/RotationalFree/rotational_free_x_'+str(sample)+'.csv')使用此代码,当您处理 500 个元素,每个元素大小为 100 x 100 的数据,...但是,当您尝试处理 500 个元素,每个元素大小为 400 x 400 ,在调用 get() 时会收到内存错误。...当您尝试处理较大的数据,这些列表可能变得非常大,从而导致内存不足。为了解决此问题,您需要避免在内存中保存完整的列表。您可以使用多进程库中的 imap() 方法来实现这一点。.../CSV/RotationalFree/rotational_free_x_'+str(sample)+'.csv') pool.close() pool.join()通过使用这种方法,您可以避免出现内存错误

    13510

    Java Mybatis使用resultMap 属性赋值顺序错误的坑

    今天发现个坑,新建的表使用生成工具生成的mapper文件和实体类后,发现少了个字段就又手动加了下,结果发现一个问题 ids是后加入的字段 @Data @Builder public class QueryRecordPo...mybatis在生成目标类进行映射,会先检查构造函数声明情况,但 如果Data注解和Builder注解一块使用的话就只会生成全属性参数构造函数,不会有默认无参构造函数。...但如果实体类的属性定义顺序与数据库中字段顺序不一致,就会出现赋值错误的情况。 然后再为outputField字段赋值时调用了set方法 这样就出现了两个不同名但同值的属性。...解决办法: 1 修改属性顺序保持一致 2 为实体类加上@NoArgsConstructor和 @AllArgsConstructor注解 使其可以生成无参数构造函数即可 之前生成 顺序都保持了一致,还真没发现这个问题

    1.5K10

    使用 Promise 的5个常见错误,你占了几个!

    因此,许多人在实践中往往会犯错误。 在本文中,介绍一下使用 promise 的五个常见错误,希望大家能够避免这些错误。 1.避免 Promise 地狱 通常,Promise是用来避免回调地狱。...在 Promise 中使用 try/catch 块 通常情况下,我们使用 try/catch 块来处理错误。然而,不建议在 Promise 对象中使用try/catch 。...当我们在一个函数声明前使用 async 关键字,它会返回一个 Promise,我们可以使用 await 关键字来停止代码,直到我们正在等待的Promise解决或拒绝。...假设我们想在Promise 块中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。...答案就是使用函数。函数是一种耗时的机制。只有当开发者明确地用 () 来调用它们,它们才会执行。简单地定义一个函数还不能让我们得到什么。

    62800
    领券