首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >围绕一个雪碧- 2d蠕虫风格的游戏?(LibGDX)

围绕一个雪碧- 2d蠕虫风格的游戏?(LibGDX)
EN

Game Development用户
提问于 2016-11-09 18:37:18
回答 1查看 434关注 0票数 1

我目前正在学习在Libgdx中编写2d游戏代码。现在我在做一种蠕虫克隆。到目前为止,我正在使用Box2d,只有我的主要精灵和一个平坦的地面对象。

我坚持的是为主角做十字线,当玩家按上下键时,我想在90 of的距离内围绕他旋转。

以下是我到目前为止所拥有的代码,但我甚至没有尝试过旋转代码:

代码语言:javascript
运行
AI代码解释
复制
package com.supermegabrobro.apoca.Sprites;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.supermegabrobro.apoca.Screens.PlayScreen;

    public class ArmyDude extends Sprite {
PlayScreen playScreen;
BodyDef bodyDef;
Body body;
FixtureDef fixtureDef;

boolean crossHairShowing = false;

Texture crossHairTexture;
float crossHairDistance = 30f;
float crossHairAngle = 45f;
Vector2 crossHairPosition;


public ArmyDude(PlayScreen playScreen){
    super(new Texture("armydude.png"));
    this.playScreen = playScreen;
    bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.DynamicBody;
    bodyDef.position.set(0,0);   // TODO: Make this random

    body = playScreen.world.createBody(bodyDef);
    CircleShape circleShape = new CircleShape();
    circleShape.setRadius(getWidth() / 2);
    fixtureDef = new FixtureDef();
    fixtureDef.shape = circleShape;
    body.createFixture(fixtureDef);

    crossHairTexture = new Texture("crosshair.png");
    crossHairPosition = new Vector2(0,0);





}

public void update(float dt){
    setPosition(body.getPosition().x - getWidth() / 2, body.getPosition().y - getHeight() / 2);

    if(Gdx.input.isKeyPressed(Input.Keys.UP)){
        crossHairShowing = true;
    }
}


@Override
public void draw(Batch batch) {
    super.draw(batch);
    if (crossHairShowing){

    }
}
}

任何帮助都是非常感谢的,谢谢。(注:我已经阅读了,并在以前的项目中实施了正常旋转的精灵。但我认为这是非常不同的,因为我试图不旋转实际的精灵,而是画一个纹理(交叉的),围绕这个精灵旋转。

我真的被困住了,虽然我可怜的大脑无法独自解决这个问题。

EN

回答 1

Game Development用户

回答已采纳

发布于 2016-11-11 02:31:01

通常这样的问题可以用向量几何来解决。利用矢量的基本思想,可以更容易地解决与坐标系有关的问题。

对于你的游戏,步骤如下:

  1. 在构造函数浮动角=45f处创建anglecrosshairVector;创建Vector2 crosshairVector =新Vector2;
  2. 在获取交叉位置的方法中,获取播放机的矢量位置。Vector2 playerVector =新Vector2(getX(),getY());
  3. 创建一个向量,其长度为播放机和十字线之间所需的距离。Vector2 distanceVector =新Vector2(90,0);
  4. 根据角度变量的值旋转矢量。DistanceVector.setAngle(角);
  5. 将这两个矢量相加在一起,得到十字的位置矢量。crosshairVector = playerVector.add(distanceVector);

现在,在向量crosshairVector中有十字线的位置。使用crosshairVector.xcrosshairVector.y,可以得到x和y值。要旋转横发,只需改变角度变量。

如果你想了解更多关于向量的基本知识,你可以看看:https://www.mathsisfun.com/algebra/vectors.html

票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/132837

复制
相关文章
【EventBus】事件通信框架 ( 订阅方法注册 | 检查订阅方法缓存 | 反射获取订阅类中的订阅方法 )
1. 获取订阅者类 : 通过反射获取该订阅者类中的所有订阅方法 , 凡是订阅方法 , 都带有 @MySubscribe 注解 ;
韩曙亮
2023/03/29
3.4K0
Python 中的布尔值
这是因为在输出的时候,判断 a or 'world' ,当 a 为 True 的时候,会输出 a ,同样的道理,当 b = '' 的时候,也就是 b 为 False, 这个时候会输出后面为真的内容。也就是 'world' 。
zucchiniy
2019/10/30
1.7K0
在Java中为什么不同的返回类型不算方法重载?
方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。 比如以下 4 个 method 方法就可以称之为方法重载,如下代码所示:
磊哥
2022/01/20
3.5K0
在Java中为什么不同的返回类型不算方法重载?
RabbitMQ在php中的使用----发布与订阅
安装教程 rabbitmq和php的amqp扩展教程网上有很多,大家可以自行查询,例如:Linux系统安装RabbitMQ及PHP安装amqp拓展库详细教程
美团骑手
2021/01/18
2K0
【EventBus】EventBus 源码解析 ( 注册订阅者 | 订阅方法 | 查找订阅方法 )
EventBus 中调用 EventBus.getDefault().register(this) 注册订阅者 ; 该方法中主要进行了如下
韩曙亮
2023/03/29
2.3K0
ios中iframe的scroll滚动事件替代方法
在公众号的开发中,遇到ios中iframe的scroll滚动事件失效,在此做下记录。 因为接口获取的数据必须放在iframe中展示,滚动到底部按钮变亮,如图: 代码如下: <!DOCTYPE html
deepcc
2018/07/05
2K0
ios中iframe的scroll滚动事件替代方法
在公众号的开发中,遇到ios中iframe的scroll滚动事件失效,在此做下记录。 因为接口获取的数据必须放在iframe中展示,滚动到底部按钮变亮,如图: 代码如下: <!DOCTYPE html
deepcc
2018/05/16
2.8K0
Java 中如何限制方法的返回时间
可以使用 JDK 中的 ExecutorService 方法来对调用的方法进行处理。
HoneyMoose
2023/02/10
3.1K0
Java 中如何限制方法的返回时间
Excel公式技巧32: 处理公式中的布尔值
在我们编写公式时,特别是编写数组公式时,往往会生成由TRUE/FALSE值组成的中间数组。有些Excel函数可以忽略这些布尔值,例如SUM函数,但是很多函数不能处理这些布尔值,如果将它们传递给这些函数,就会导致错误。因此,在将这些布尔值传递给函数继续处理时,需要将它们转换成数字。
fanjy
2020/05/14
2.8K0
在日历中订阅腾讯待办,了解一下?
在我们的待办清单里,可能会记录着这样的日程: 对于这些有deadline的待办事项,如果想要更加直观和清晰地在日历应用上查看和管理,应该如何实现? 这时,你只需要一个URL,就可以在其他日历应用中轻松订阅腾讯待办。即便是脱离了待办小程序,也能在日历中看到设置了日期的未完成待办事项。 哪些日历可以订阅腾讯待办? 支持ics格式的URL订阅的日历:比如Outlook日历、macOS、iOS、部分安卓机型以及其他第三方日历等。 其他更多机型,如果有数据同步需求,可以到官方社区留言。 官方社区:https:
腾讯云DNSPod团队
2021/09/18
1.3K0
java中的onresume_java – 直接onResume()调用的替代方法
我的应用程序目前在onResume()内部完成大部分工作,然后发布显示,这是onResume()的结束.
全栈程序员站长
2022/09/05
9370
在vue中如何监听移动端的返回键
环境:vue.js+vant 问题:首页列表和分类页的列表用的同一个页面,页面区分用的是本地缓存,希望在分类页点击返回的时候,执行清除缓存,刷新页面 解决原理:利用history和浏览器刷新popstate状态去实现 每一次返回都会去历史记录回退 -1 所以就在进入页面之前 往历史记录里面多记录一次当前页面的链接。然后再回退的时候监听刷新,去做一些事情。 具体执行: 1、挂载完成后,判断浏览器是否支持popstate
IT工作者
2022/03/14
3.6K0
在日历中订阅腾讯待办,了解一下?
对于这些有deadline的待办事项,如果想要更加直观和清晰地在日历应用上查看和管理,应该如何实现?
腾讯待办
2021/09/29
9590
在日历中订阅腾讯待办,了解一下?
在 React 16 中从 setState 返回 null 的妙用[每日前端夜话0x7D]
在 React 16 中为了防止不必要的 DOM 更新,允许你决定是否让 .setState 更来新状态。在调用 .setState 时返回 null 将不再触发更新。
疯狂的技术宅
2019/06/11
14.7K0
【说站】splitlines在python中返回列表
2、返回一个是否包含换行符的列表,如果参数keepends为False,则不包含换行符。
很酷的站长
2022/11/23
2.5K0
Python中的布尔类型以及布尔值介绍
布尔类型是一种逻辑类型,它只有两个取值:True(真)和False(假)。在Python中,True和False是内置的布尔类型常量,用于表示真和假的状态。
小博测试成长之路
2023/09/01
9800
Python中的布尔类型以及布尔值介绍
IE中 时间对象方法getTime返回NaN
在IE中使用Date对象的getTime方法解析以下格式的日期时(2020-12-14 16:00:00)会返回NaN,原因是在IE中使用该方法时参数的格式必须为YYYY/MM//DD
peng_tianyu
2022/12/15
1.2K0
点击加载更多

相似问题

Sitecore Web Item API 404

21

Sitecore Item Web API -嵌套JSON结构?

20

Sitecore Item Web API未返回任何字段

13

Sitecore Item Web API -找不到模板项目错误

11

如何使用item web api在sitecore 6.5中创建媒体项目

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文