ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – MouseJointDef libgdx – 绘制像愤怒的小鸟一样的轨迹线

2019-06-13 14:50:11  阅读:163  来源: 互联网

标签:java libgdx box2d


在libgdx游戏中

我想触摸然后然后拖动某个地方,然后在释放(touchUp)上根据目标身体的距离和方向施加方向力.触地时,目标体保持静止,然后在触摸时沿着所需的轨迹施加力.

(非常类似于愤怒的小鸟 – 当你拿着弹弓的时候,你可以看到目标身体的虚线轨迹 – 我想做同样的事情)

所以我想这可能不是最困难的事情但是给了一些选项我倾向于使用MouseJointDef但它立即施加力(即目标立即移动 – 我希望它保持静止然后一旦触摸事件发生然后施加力量)

什么是绘制轨迹的最简单方法?我也使用Box2D.

解决方法:

创建一个继承InputAdapter类的类,然后创建它的实例并注册它以监听触摸输入.

    Gdx.input.setInputProcessor(inputAdapter);

有3种方法可以处理触摸事件touch_down,touch_dragged和touch_up,您必须覆盖它们.

在touch_down中,检查触摸位置是否在鸟区域内.如果是,请将布尔标志设为true.

在touch_dragged中,检查上面的标志,如果为真,则计算触摸位置相对于鸟类拍摄中心的距离和拍摄角度.

在touch_up中,您可以通过调用命令以计算的金额进行拍摄

    body2shoot.applyLinearImpulse(impulse, body2shoot.getWorldCenter());

MouseJointDef无需移动body2shoot.只需将body2shoot的变换设置为在每个渲染周期中拖动的触摸位置.

为了计算轨迹我写了一个这样的类:

public class ProjectileEquation
{
public float gravity;
public Vector2 startVelocity = new Vector2();
public Vector2 startPoint = new Vector2();

public ProjectileEquation()
{   }

public float getX(float t)
{
    return startVelocity.x*t + startPoint.x;
}

public float getY(float t)
{
    return 0.5f*gravity*t*t + startVelocity.y*t + startPoint.y;
}
}

为了绘制它,我设置了startPoint和startVelocity,然后在循环中我逐渐给出t(时间)并调用getX(t)和getY(t).

标签:java,libgdx,box2d
来源: https://codeday.me/bug/20190613/1233424.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有