Cocos2dx 物体按指定轨迹匀速运动 (坐标均距)

最近做了一个类似于airControl的游戏,就是画出一条线让飞机沿着线跑。。。最后着陆。

关于其中的核心代码就是在三个Touch回调中记录手指移动的坐标,然后存入坐标数组,最后让飞机(精灵)按照坐标数组中的线段(前一个点到后一个点)移动(MoveTo),出来就是游戏想要的效果了。

但是在这之间遇到的问题就是由于手指不是按匀速移动,导致每个touch中取到的点之间的距离也不相同,然后飞机跑的时候就会时快时慢,这样出来的效果肯定不好。

思想了一番,我们可以在取点的时候对坐标处理一下,让每个点之间的距离都相同就可以了,以下是效果图,红色是处理之前的,黑色是处理之后(防止重叠,我把线错开了)。

下面上代码。。这是Cocos2d-lua版的

local prePoint = nil
local curPoint = nil --上一个  当前坐标
local m_ptOrbit = {} --坐标数组
local tmp = {x = 0,y = 0}  local MX = 10  --设定均化后每点间距local function onTouchBegan(touch,event)local location = touch:getLocation()prePoint = {x = location.x,y = location.y}curPoint = {x = location.x,y = location.y}table.insert(m_ptOrbit,prePoint)return true
end
--
local tance = 0    --两点间距
local xTance = 0
local yTance = 0            --x  y  距离
local function onTouchMoved(touch,event)--        print("move")local location = touch:getLocation()curPoint = {x = location.x,y = location.y}xTance = prePoint.x-curPoint.xyTance = prePoint.y-curPoint.y--        --计算距离  testcordtance = math.sqrt(xTance * xTance+yTance * yTance)if tance>=MX thenif tance == MX thentable.insert(m_ptOrbit,curPoint)prePoint = {x = curPoint.x,y = curPoint.y}else--计算均距化后的点坐标for i=1,math.floor(tance / MX) doif xTance < 0 thentmp.x = prePoint.x + MX*i*math.abs(xTance) / tanceelsetmp.x = prePoint.x - MX*i*math.abs(xTance) / tanceendif yTance < 0 thentmp.y = prePoint.y + MX*i*math.abs(yTance) / tanceelsetmp.y = prePoint.y - MX*i*math.abs(yTance) / tanceend--新点m_ptOrbit[#m_ptOrbit+1] = {x = tmp.x,y = tmp.y}endprePoint = {x = tmp.x,y = tmp.y}endelsecurPoint = prePointend
end

原理很简单,计算当前点与上一点之间的距离是否与MX相同,超了就从中间切,然后算出相近的点,不够了就补,照样算出新点。整条线的平滑程度取决与MX的大小,过大会不平滑,过小绘线就会卡 = =。。而且这样算出来的新轨迹跟实际轨迹差距不大。然后说一句,貌似根据距离算Action的dur也可匀速,童鞋们可以尝试一下。

Cocos2dx 物体按指定轨迹匀速运动 (坐标均距)相关推荐

  1. [UE5]物体沿指定路径(样条线)循环往复的移动

    [UE5]物体沿指定路径-样条线循环往复的移动 视频演示: 视频教程 源码: 文字教程: 大神教程: 小白教程: UE5.0.3 视频演示: B站:https://www.bilibili.com/v ...

  2. Unity实现物体沿指定的轴向旋转

    一.Unity实现物体沿指定的轴向旋转的方法 /*** * Title:"三维可视化" 项目 * 主题:物体旋转控制 * Description: * 功能:XXX * Date: ...

  3. 3Ds Max坐标轴切换,使用物体的世界坐标和本地坐标之间切换

    标题:当挪动物体的时候想使用(本地)/(世界)坐标移动 官方文档 https://help.autodesk.com/view/3DSMAX/2023/CHS/?guid=GUID-0F3E2822- ...

  4. Android Animation实现元素在屏幕上按照指定轨迹运动,以及出现NullPointerException的解决方案

    因项目需要,在Android中实现了一个动画,当在Activity中点击特定按钮时,会在屏幕上添加一个ImageView,并按照指定的起点.终点,沿着特定的轨迹运动(例如直线). 实现方法 实现思路是 ...

  5. python目标跟踪精度曲线图_Python+opencv3.4+Kalman滤波在视频中跟踪绘制运动目标,Pythonopencv34kalman,卡尔曼滤波,实现,物体,追踪,和,轨迹...

    实验环境: Python3.6+OpenCV3.4+pycharm2019 代码实现: 首先是一个 简单的不用kalman滤波的运动目标追踪代码 这里可以根据需要进行摄像头运动目标识别,只要把 cam ...

  6. 关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置

    1.cocos2d-X中的坐标(0,0),就是运行框的左下角位置,所以运行框看起来就是一个第一象限. 2.节点的锚点就是我们setPosition所设定的位置,默认锚点是在节点的中心,也就是setPo ...

  7. ubuntu ffmpeg 截取视频指定时间范围,坐标范围

    截取时间范围 -ss后面是start time, -to 后面是end time, in.avi是输入视频,out.avi是输出视频 ffmpeg -ss 00:00:10 -to 00:01:10 ...

  8. android滑屏轨迹运动,Android Animation实现元素在屏幕上按照指定轨迹运动,以及出现NullPointerException的解决方案...

    因项目需要,在Android中实现了一个动画,当在Activity中点击特定按钮时,会在屏幕上添加一个ImageView,并按照指定的起点.终点,沿着特定的轨迹运动(例如直线). 实现方法 实现思路是 ...

  9. canvas获取鼠标轨迹相对坐标

    canvas绑定事件的时候,获得鼠标点击的地方在canvas画布内的坐标的方法. var x = event.clientX - canvas.getBoundingClientRect().left ...

最新文章

  1. (转)I 帧和 IDR 帧的区别
  2. Hadoop数据仓库工具——Hive
  3. Navicat for Oracle Cannot load OCI DLL
  4. 有互感的电感的串并联
  5. php curl rst,CURL错误:Recv失败:通过对等方重置连接 - PHP Curl
  6. 《梦断代码》阅读笔记Ⅱ
  7. Java算法--插入排序算法
  8. CXF与Web项目集成---without Spring
  9. What happens when clicking interaction record work center?
  10. LeetCode 167. 两数之和 II - 输入有序数组(双指针)
  11. aspectj 注解
  12. zxr10交换机配置手册vlan_中兴ZXR10 G系列交换机SVLAN使用指导
  13. java编译不报错但运行啥都没_java编译时与运行时概念与实例详解
  14. C++模版类List实现
  15. 产品的细节能决定成败吗?
  16. JSP期末考试复习习题及答案
  17. java生成二维码工具
  18. java画布canvas_画布(Canvas类)初探
  19. thinkpad重装系统不引导_联想Y400电脑装WIN7无法重装系统的解决方法
  20. STM32超级简便的按键代码 只需三行 可实现短按+长按

热门文章

  1. 单片机6路抢答器c语言程序设计,基于单片机的抢答器设计(最终版)最新版
  2. 单片机综合实验 - 03 | 音乐门铃设计
  3. 苹果应用程序商店_国内IOS苹果企业开发者账号申请被拒
  4. 直播预告 | ICLR专场四
  5. 产品经理如何做前期调研
  6. MySQL 8.0报错1114, “The table ‘/data/mysql/5306/tmp/#sql70da_911_3‘ is full
  7. Python-100-days 面向对象编程-简单想法学习写21点游戏(一)
  8. 你知道的宽动态有多宽?
  9. 计算机制作母亲节,“妈妈,我想对你说”---计算机学院举办母亲节感恩活动
  10. 计算机网络实验 socket编程,计算机网络实验 socket编程