Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Libgdx computeGlyphAdvancesAndPositions不存在

Libgdx computeGlyphAdvancesAndPositions不存在
EN

Stack Overflow用户
提问于 2017-03-22 06:13:06
回答 1查看 167关注 0票数 2

我用Libgdx做文字动画。试着做这样的事

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
font1 = new BitmapFont(Gdx.files.internal("fontLabel/fonty.fnt"), false);
font1.getRegion().getTexture()
        .setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
touchPos = new Vector3();

listchar = new TextButton[pause.length()];
advances = new FloatArray();
post = new FloatArray();
font1.computeGlyphAdvancesAndPositions(pause, advances, post);

但是computeGlyphAdvancesAndPositions不再退出了,该怎么办?

编辑

我读过这个博客帖子,它说要使用GlyphLayout,但是我不知道怎么做?GlyphLayout不接受我想要给出的参数

我想做一些像这段视频中的动画一样的事情,旧的源代码是这里,但是如上所述,由于我突出显示的部分,它不再工作了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.tntstudio.texteffect;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.FloatArray;

public class TECore implements ApplicationListener {
    private Stage stage;
    private BitmapFont font;
    private TextButton[] listchar;
    private FloatArray post, advances;
    private String text;
    private static final float time = 0.5f, delay = 0.2f;
    private static final float x = 200f, y = 200f;

    @Override
    public void create() {
        stage = new Stage(800f, 480f, true);
        font = new BitmapFont(Gdx.files.internal("data/texteffect.fnt"));
        font.getRegion().getTexture()
                .setFilter(TextureFilter.Linear, TextureFilter.Linear);
        text = "manh phi libgdx";
        listchar = new TextButton[text.length()];
        advances = new FloatArray();
        post = new FloatArray();
        font.computeGlyphAdvancesAndPositions(text, advances, post);

        final TextButtonStyle style = new TextButtonStyle();
        style.font = font;

        /*-------- List Text --------*/
        for (int i = 0; i < text.length(); i++) {
            listchar[i] = new TextButton(String.valueOf(text.charAt(i)), style);
            listchar[i].setTransform(true);
            listchar[i].setPosition(x + post.get(i), y);
            listchar[i].setOrigin(advances.get(i) / 2,
                    listchar[i].getHeight() / 4);
            stage.addActor(listchar[i]);
        }

        Gdx.input.setInputProcessor(stage);

        /*-------- Drop Effect Adapter --------*/
        TextButton drop = new TextButton("drop", style);
        drop.setPosition(0, 10);
        drop.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                dropText();
            }
        });
        stage.addActor(drop);

        /*-------- Spin effect Adapter --------*/
        TextButton spin = new TextButton("spin", style);
        spin.setPosition(0, 100f);
        spin.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                spinText();
            }
        });
        stage.addActor(spin);
        /*-------- Appear effect Adapter --------*/
        TextButton appear = new TextButton("appear", style);
        appear.setPosition(0, 300f);
        appear.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                appearText();
            }
        });
        stage.addActor(appear);

    }

    // ///////////////////////////////////////////////////////////////
    // Reset Param of a char in text
    // ///////////////////////////////////////////////////////////////
    private void resetText() {
        for (int i = 0; i < text.length(); i++) {
            listchar[i].setPosition(x + post.get(i), y);
            listchar[i].setOrigin(advances.get(i) / 2,
                    listchar[i].getHeight() / 4);
            listchar[i].setColor(0, 0, 0, 1);
            listchar[i].setScale(1f);
        }
    }

    private void dropText() {
        resetText();
        for (int i = 0; i < text.length(); i++) {
            listchar[i].setY(y + 200f);
            listchar[i].setColor(0, 0, 0, 0);
            listchar[i].addAction(Actions.delay(
                    delay * i,
                    Actions.parallel(Actions.alpha(1, time), Actions.moveTo(x
                            + post.get(i), y, time, Interpolation.bounceOut))));
        }
    }

    private void spinText() {
        resetText();
        for (int i = 0; i < text.length(); i++) {
            listchar[i].addAction(Actions.delay(delay * i,
                    Actions.rotateBy(360f, time * 5, Interpolation.elastic)));
        }
    }

    private void appearText(){
        resetText();
        for (int i=0; i<text.length(); i++){
            listchar[i].setScale(0f);
            listchar[i].setColor(0, 0, 0, 0);
            listchar[i].addAction(Actions.delay(delay*i, Actions.parallel(Actions.alpha(1, time), Actions.scaleTo(1, 1, time, Interpolation.swingOut))));
        }
    }

    @Override
    public void dispose() {
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-26 09:07:33

版本1.5.6 of libGDX以来,BitmapFont.computeGlyphAdvancesAndPositions 移除方法更倾向于GlyphLayout

BitmapFont.computeGlyphAdvancesAndPositions返回两个数组,其中包含给定CharSequence字符的进位和位置。

使用GlyphLayout检索相同的信息

  1. 创建一个GlyphLayout对象并设置所需的字体和文本: GlyphLayout布局=新的GlyphLayout();layout.setText(字体、文本);
  2. 所提供的文本将根据换行符分为“run”;如果没有换行符,则整个文本将存储在第一次运行中: GlyphRun run = layout.runs.get(0);
  3. GlyphRun包含与BitmapFont.computeGlyphAdvancesAndPositions返回的高级数组相当的xAdvances;不同的是,数组的第一个位置包含相对于绘图位置的X偏移量,而i-th字符的实际前进宽度位于数组的i-th + 1元素中: startingOffset = run.xAdvances.get(0);ithAdvance = run.xAdvances.get(i + 1);
  4. 不幸的是,文本中单个字符的位置不再容易获得,但是我们可以通过添加前几个字符的进步来获得它们: float[] plus =新的floattext.length();for (int i= 0;i< positions.length;i++) { if (i == 0) { //第一个位置是起始偏移位置= run.xAdvances.get(0);}{ //当前位置是前一个位置加上其前进位置=位置-1+ run.xAdvances.get(i);}

最后:

  • advances.get(i)run.xAdvances.get(i + 1)取代
  • post.get(i)positions[i]取代,如前面所示(或以相同的方式)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42954159

复制
相关文章
magento soap api
step 2: 添加一个资源信息(模块名,不要加namespace) 注意:在etc 下的XML文件中,不要使用namespace, 否则会报错,会把当前模块下的helper 去Mage下查找。 在 resource 下添加 method,method 中的元素有 list ,create,update,delete.info. 如下:
全栈程序员站长
2022/09/14
1.7K0
magento soap api
如何快速快速地将MAGENTO 1迁移到MAGENTO 2
要迁移还是不迁移? 自Magento 2问世以来,这个问题无疑已经引起您的注意。 Magento 2迁移并不是一个神奇的一键式过程,因此也就不足为奇了,尤其是考虑到您的Magento 1商店运作良好并产生了利润。 如果没有损坏,请不要修复,对吗? 尽管现实情况是Magento 2征服了市场,但企业主正在逐渐将其商店迁移到新版本,以获得更多收益。 如果您仍然有疑问,让我们立即澄清两个更棘手的问题,以便我们继续讨论如何以合理的价格轻松升级Magento。
Alisa_Porter
2020/09/14
2.5K0
在CentOS 7上安装Magento(Install Magento on CentOS 7 译文)
原文作者:null 原文地址:https://www.linode.com/docs/websites/ecommerce/install-magento-on-centos-7/ 译者微博:@从流域到海域 译者博客:blog.csdn.net/solo95
Steve Wang
2019/05/28
9.4K1
magento 2.3安装测试数据
  前面我们一步步composer安装Magento2.3,但是没有数据的话各项设置不是很熟悉,所以最好还是安装一下测试数据。下面我们就跟ytkah一起填充数据。假设magento 2.3安装目录是/www/magento,进入目录
ytkah
2018/12/25
2.9K0
magento开发手册之目录结构
  magento是一个很优秀的电商系统,很多朋友会用它部署自己的电商网站,少不了二次开发。下面我们随着ytkah来一起认识一下magento开发手册之目录结构吧。
ytkah
2022/03/14
1.2K0
在CentOS 7上安装Magento
在这篇教程中,您将学习如何在CentOS 7上安装Magent。Magento Community Edition(CE,即社区版)是一个免费的开源电子商务平台。由于它简单却强大的管理面板和庞大的开发者社区,它是自助式在线商店最受欢迎的解决方案之一。
Steve Wang
2018/09/04
14K1
在CentOS 7上安装Magento
Magento 和 WordPress 的区别
Magento: Magento 是一个用 PHP 编写的强大的开源电子商务 Web 应用程序。它由 Magento, inc 于 2008 年 3 月 31 日开发。 Magento 是使用 Zend 框架构建的,它使用实体属性值(EAV)数据库模型来存储值,并且只有 Magento 社区版提供免费版本。Magento 通过提供与类别、产品和销售订单等资源的整合来提供管理电子商务商店的能力。Magento 是一个高度灵活和可定制的框架。
海拥
2022/11/14
1.6K0
MySQL kill会话不起作用?
在一次日常测试中发现,kill 一个会话后,SQL语句依然在运行并没终止;被kill的会话重新连接并继续执行原来的SQL语句。
老叶茶馆
2023/09/01
2500
MySQL kill会话不起作用?
AKShare-宏观数据-建材价格指数
建材行业是中国重要的材料工业。建材产品包括建筑材料及制品、非金属矿及制品、无机非金属新材料三大门类,广泛应用于建筑、军工、环保、高新技术产业和人民生活等领域。
数据科学实战
2022/04/18
2940
AKShare-宏观数据-建材价格指数
MySQL kill会话不起作用?
在一次日常测试中发现,kill 一个会话后,SQL语句依然在运行并没终止;被kill的会话重新连接并继续执行原来的SQL语句。
GreatSQL社区
2023/08/10
3950
MySQL kill会话不起作用?
Magento 2数据库EAV模型结构
EAV模型是一种数据模型 ,用于描述实体的数量预计会很大,但事实上,实体中要使用的属性数量并不多。 Magento 2这么设计是为了灵活性,在不影响主干的基础上,任意新增删除属性。 EAV模型(E ->实体,A -> 属性,V -> 值)简单理解就是分表,不需要把所有字段都放在主表里,而是按类型存放在不同的副表上。 对于字段少的项目来说 EAV其实没啥用 效率不高。
ytkah
2022/03/14
2.5K0
Magento 2数据库EAV模型结构
RecyclerView.Adapter notifyDataSetChanged 不起作用
如果应用启动,不在聊天界面,接收到消息后就弹出通知栏消息通知用户,点击进入聊天界面。
张拭心 shixinzhang
2022/05/06
3K0
关于.gitignore不起作用「建议收藏」
由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:
全栈程序员站长
2022/11/01
2K0
如何使用MageScan检测Magento站点的安全性
 关于MageScan  MageScan是一款功能强大的安全检测工具,在该工具的帮助下,广大研究人员可以轻松对目标MageScan站点进行性能和安全性评估。  工具安装  .phar安装 首先,我们需要从该项目的【Releases页面】下载magescan.phar文件。 然后使用pip命令在命令行窗口中执行该文件: php magescan.phar scan:all www.example.com(向右滑动,查看更多) 源码安装 广大研究人员首先需要使用下列命令将该项目源码克隆至本地: git
FB客服
2023/05/12
6900
如何使用MageScan检测Magento站点的安全性
Nginx配置缺失导致CSS不起作用
启动nginx,打开网页,发现样式并没有如期加载,看chrome的console,显示如下:
血狼debugeeker
2021/03/02
3.8K0
解决CSS属性position:fixed不起作用
若父元素设置了transform属性,无论transform设置任何属性值,都会导致position:fixed属性失效!
赵彤刚
2022/12/13
3.3K0
解决CSS属性position:fixed不起作用
textarea 的 placeholder="" 不起作用
textarea 的 placeholder="请输入解决方案(极简化、不超过500字)" 不起作用
一个会写诗的程序员
2018/08/17
2K0
FeignClient 设置 fallback不起作用
StringCloud FeignClient 设置 fallback不起作用 今天在配置feign中是用hystrix的时候,FeignClient 中的 fallback不起任何作用,本来以为是 不支持这个属性了,打开源码一看,还提供这个fallback属性,后来翻阅各中资料,才发现是没有打开feign对hustrix的支持。下面是解决方案: 在application.yml中加入如下配置就可以了 feign: hystrix: enabled: true
码农笔录
2018/06/29
3.5K0
setOnItemClickListener不起作用解决方法
setOnItemClickListener不起作用解决方法 问题 原因 源码解析 解决方法 问题 使用ListView时通常会和Adapter一起使用,在使用setOnItemClickListener方法监听节点时不起作用 原因 原因是因为在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件,此时这些子控件会获取到焦点,所以常常当点击item时变化的是子控件,item本身的点击没有响应,此时就该用到descendantFocusability属性了,下面让我
是阿超
2022/05/05
2K0
setOnItemClickListener不起作用解决方法
点击加载更多

相似问题

乌龟版本控制--这真的很重要吗?

20

Apache .htaccess与httpd --这真的很重要吗?

41

MySQL:字段长度。这真的很重要吗?

50

getBufferStrategy();还是createBufferStrategy(2/3);哪个先到?这很重要吗?

20

Android应用程序命名约定--这真的很重要吗?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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