首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android/Libgdx如何解决这个问题?

Android/Libgdx如何解决这个问题?
EN

Stack Overflow用户
提问于 2016-08-04 13:20:55
回答 1查看 64关注 0票数 0

目前,iam编程在一个游戏中,你移动一艘宇宙飞船,并试图避免小行星。当用户接触到飞船时,飞船应该移动,因此要跟随用户的手指移动。宇宙飞船是一种精灵,它围绕着:

代码语言:javascript
运行
复制
if (Gdx.input.isTouched()) {  

    x = Gdx.input.getX() - width / 2;
    y = -Gdx.input.getY() + height / 2;

} 

我现在遇到的问题是,用户可以通过触摸屏幕传送宇宙飞船。我怎么才能解决这个问题?有可能设置一个触摸区域吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 14:12:07

计算出从船到接触点的单位矢量方向,并将其乘以速度。您需要将触摸坐标转换为世界坐标,通过取消投影与相机。

代码语言:javascript
运行
复制
private static final float SHIP_MAX_SPEED = 50f; //units per second
private final Vector2 tmpVec2 = new Vector2();
private final Vector3 tmpVec3 = new Vector3();

//...

if (Gdx.input.isTouched()) {  
    camera.unproject(tmpVec3.set(Gdx.input.getX(), Gdx.input.getY(), 0)); //touch point to world coordinate system.
    tmpVec2.set(tmpVec3.x, tmpVec3.y).sub(x, y); //vector from ship to touch point
    float maxDistance = SHIP_MAX_SPEED * Gdx.graphics.getDeltaTime(); //max distance ship can move this frame
    if (tmpVec2.len() <= maxDistance) {
        x = tmpVec3.x;
        y = tmpVec3.y;
    } else {
        tmpVec2.nor().scl(maxDistance); //reduce vector to max distance length
        x += tmpVec2.x;
        y += tmpVec2.y;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38768543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档