使用 libgdx 进行触摸滚动

2024-01-12

我正在尝试在 libgdx 游戏中实现触摸滚动。我有一张宽图像,是房间的全景图。我希望能够滚动图像,以便用户可以看到房间周围的情况。我拥有它,这样我就可以滚动一定的距离,但是当注册新的 touchDragged 事件时,图像会移回到原始位置。

这就是我的实现方式

public class AttackGame implements ApplicationListener {

AttackInputProcessor inputProcessor;
Texture backgroundTexture; 
TextureRegion region;
OrthographicCamera cam;
SpriteBatch batch;
float width;
float height;
float posX;
float posY;

@Override
public void create() {
    posX = 0;
    posY = 0;
    width = Gdx.graphics.getWidth();
    height = Gdx.graphics.getHeight();  
    backgroundTexture = new Texture("data/pancellar.jpg");
    region = new TextureRegion(backgroundTexture, 0, 0, width, height);
    batch = new SpriteBatch();

}

@Override
public void resize(int width, int height) {
    cam = new OrthographicCamera();
    cam.setToOrtho(false, width, height);
    cam.translate(width / 2, height / 2, 0);
    inputProcessor = new AttackInputProcessor(width, height, cam);
    Gdx.input.setInputProcessor(inputProcessor);

}

@Override
public void render() {

    Gdx.gl.glClearColor(0,0,0,1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);    
    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    batch.draw(backgroundTexture, 0, 0, 2400, 460);
    batch.end();

}

@Override
public void pause() {
    // TODO Auto-generated method stub

}

@Override
public void resume() {
    // TODO Auto-generated method stub

}

@Override
public void dispose() {
    backgroundTexture.dispose();

}

}

在输入处理器中

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {

    cam.position.set(screenX, posY / 2, 0);
    cam.update();
    return false;
}

我在这个问题的帮助下走到了这一步LibGdx 如何使用 OrthographicCamera 滚动? https://stackoverflow.com/questions/14509261/solved-libgdx-how-to-scroll-using-orthographiccamera。然而它并不能真正解决我的问题。

我认为问题在于 touchDragged 坐标不是世界坐标,但我尝试取消投影相机但没有任何效果。

我已经为此苦苦挣扎了几个星期,我非常感谢对此的帮助。

提前致谢。


我最近做了一些你想要的事情。这是我用于移动地图的输入类,您只需为您的“cam”更改“stage.getCamera()”:

public class MapInputProcessor implements InputProcessor {
    Vector3 last_touch_down = new Vector3();

    ...

    public boolean touchDragged(int x, int y, int pointer) {
        moveCamera( x, y );     
        return false;
    }

    private void moveCamera( int touch_x, int touch_y ) {
        Vector3 new_position = getNewCameraPosition( touch_x, touch_y );

        if( !cameraOutOfLimit( new_position ) )
            stage.getCamera().translate( new_position.sub( stage.getCamera().position ) );

        last_touch_down.set( touch_x, touch_y, 0);
    }

    private Vector3 getNewCameraPosition( int x, int y ) {
        Vector3 new_position = last_touch_down;
        new_position.sub(x, y, 0);
        new_position.y = -new_position.y;
        new_position.add( stage.getCamera().position );

        return new_position;
    }

    private boolean cameraOutOfLimit( Vector3 position ) {
        int x_left_limit = WINDOW_WIDHT / 2;
        int x_right_limit = terrain.getWidth() - WINDOW_WIDTH / 2;
        int y_bottom_limit = WINDOW_HEIGHT / 2;
        int y_top_limit = terrain.getHeight() - WINDOW_HEIGHT / 2;

        if( position.x < x_left_limit || position.x > x_right_limit )
            return true;
        else if( position.y < y_bottom_limit || position.y > y_top_limit )
            return true;
        else
          return false;
}


    ...
}

这是结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 libgdx 进行触摸滚动 的相关文章

  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • Google App Engine with Java - 运行 javac.exe 编译器时出错

    在 Windows XP 上 刚刚下载并解压谷歌应用程序引擎java sdk to C Program Files appengine java sdk 我已经安装了jdk C Program Files Java jdk1 6 0 20
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何比较 Struts 2 中 url 请求参数中的单个字符

    我正在读取具有单个字符的 url 参数 它将是Y or N 我必须写一个条件来检查它是否Y or N并做相应的事情 这是我写的 但似乎不起作用 总是转到其他地方 网址是
  • 哪个 Swing 布局管理器可以获得我想要的布局?

    我正在尝试按照这个模型制作一个基本的登录菜单 我决定将整个菜单放入 JPanel 中 以便在连接成功后我可以切换到另一个面板 所以我决定使用 Borderlayout 将标题放在北区 将连接按钮放在南区 我将边框布局的中心本身设置为面板 我
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • JTable 和 JScrollpane 大小的问题

    我有一个JScrollPane with a JTable在里面 在里面JTable我最初有 3 行 稍后添加行 默认JTable我的 3 行很难看 因为JScrollPane calls getPreferredScrollableVie
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 如何用表达式语言获取布尔属性?

    如果我有一堂这样的课 class Person private int age public int getAge return age public boolean isAdult return age gt 19 我可以得到age像这样
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis

随机推荐

  • 如何注销修复会话?

    我正在使用quickfixj 我有一条自定义消息 例如 EndTrade 当我收到该消息时 我想结束修复会话吗 我怎样才能做到这一点 我还没有找到任何方法可以做到这一点 它不允许我使用new Session logout 我得到了我的问题的
  • 从 Pandas DataFrame 创建 Spark DataFrame

    我正在尝试从简单的 Pandas DataFrame 构建 Spark DataFrame 这是我遵循的步骤 import pandas as pd pandas df pd DataFrame Letters X Y Z spark df
  • chrome 扩展在新选项卡中打开链接 - 没有错误,但单击时不执行任何操作

    我正在尝试创建一个非常简单的 chrome 扩展 以便在单击时在新选项卡中打开硬编码链接 但我没有任何运气 添加扩展程序后 图标出现 但当我单击它时没有任何反应 有什么建议么 清单 json name Drive Button versio
  • 从 Pandas 数据框中删除重复的行,其中只有某些列具有相同的值

    我有一个 pandas 数据框 如下所示 A B C 1 2 x 1 2 y 3 4 z 3 5 x 我希望在特定列中共享相同值的行仅保留 1 行 在上面的例子中我指的是列A and B 换句话说 如果列的值A and B在数据框中出现多次
  • 如何在 Android Studio 中使用 Flutter RP2 清理构建?

    随着使用 Android Studio 3 1 4 发布 FLutter Release Preview 2 当我使用命令 stop main dart 命令 f2 从 Android Studio 停止程序 然后执行 run main d
  • 在 gnuplot 5 中捕获超文本值

    我确实喜欢 gnuplot 5 中新的超文本功能 但我仍然缺少一些东西 我不仅希望悬停在某个点附近来阅读一些隐藏的文本 而且我还希望能够捕获超文本 如果这个超文本是一个鼠标变量 就像 MOUSE X 和 MOUSE Y 一样 捕获它将是一个
  • 在 Scala 中获取随机元素的有效方法?

    从 Scala 集合中获取随机元素的有效方法是什么 有一个相关的在这里提问 https stackoverflow com questions 5051574 how to choose a random element from an a
  • Google 应用引擎:按 ID 过滤

    我不知何故迷路了 我想做一些类似下面按 ID 过滤的事情 id 1000 query Customers all query filter ID id or query db GqlQuery select from Customers w
  • 如何安全地注销并清除所有订阅?

    我实现了自己的登录系统 因为我使用第三方 Web 服务根据企业身份验证系统对用户进行身份验证 因此 我构建了一个调用服务器方法的表单 以对身份验证系统进行 Web 服务调用 如果凭据有效 它会使用用户的 ID 设置会话变量 这就是我更改模板
  • 如何拥有自动递增的版本号(Visual Studio)? [复制]

    这个问题在这里已经有答案了 我想存储一组在构建时自动递增的整数 int MajorVersion 0 int MinorVersion 1 int Revision 92 当我编译时 它会自动递增Revision 当我构建安装项目时 它会增
  • 在 Objective-C 中合并 NSArray

    我有一个 NSDictionary 其中每个键都指向一个数组 我稍后想将所有值合并到一个数组中 有没有一种方法可以使用 API 做一些比说更有效的事情 NSArray anArray someDictionary allValues NSM
  • 更改 R DT 数据表中控件的颜色

    在 R 中 闪亮和数据表 DT 想要将控制文本的颜色更改为蓝色 因为它建议它可以在这里 https datatables net manual styling theme creator https datatables net manua
  • 如何为 Web 作业处理提供基于配置的队列名称?

    我有一个 webjob 应用程序来处理 ServiceBus 队列 它运行良好 使用以下方法 public static void ProcessQueueMessage ServiceBusTrigger myQueueName Brok
  • html5语义元素和旧浏览器

    我即将为网页设计一个新的布局 并想利用这一刻来实现一些 html5 标记 我首先想到的是语义元素 导航 标题 文章 检查后http caniuse com feat html5 语义 http caniuse com feat html5s
  • Terraform 错误“您的查询未返回结果”

    我有以下 bom asg tf 文件 data aws ami bom ami most recent true filter name tag ami name values var environment bom ami owners
  • 使用 Conda 和 Spyder 安装 OpenCV

    我在使用 Conda 安装 OpenCV 时遇到问题 我尝试运行许多命令 但没有一个起作用 例如 当我跑步时conda install c anaconda opencv 按照https anaconda org anaconda open
  • 如何将 MongoDB - 正在运行的 Docker 容器的数据保存在新映像中?

    我有一个正在运行的 Mongodb 容器 名为 xyz 来自官方 Mongo Image 我创建了容器docker run d p 21707 21707 mongo在此容器中 我创建了 2 个包含示例数据的集合 现在我想在 dockerh
  • Mule http:outbound-endpoint + multipart/form-data

    我正在尝试调用一个期望接收多部分 表单数据的休息服务 但我遇到了一些问题 经过一段时间的搜索 我了解到我必须将有效负载移动到出站附件并将有效负载设置为空
  • 假设 DayOfWeek 的数值是否安全?

    我将星期几存储在数据库中 其中星期日 1 星期一 2 等 在数据库查询中 我需要将日期转换为System DayOfWeek 根据MSDN http msdn microsoft com en us library system dayof
  • 使用 libgdx 进行触摸滚动

    我正在尝试在 libgdx 游戏中实现触摸滚动 我有一张宽图像 是房间的全景图 我希望能够滚动图像 以便用户可以看到房间周围的情况 我拥有它 这样我就可以滚动一定的距离 但是当注册新的 touchDragged 事件时 图像会移回到原始位置