全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题

详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题

今天在项目中实现了一个效果,主要是画一个圆。为了后续使用方便,将这个圆封装在一个自定义Actor(CircleActot)中,后续想显示一个圆的时候,只要创建一个CircleActor中即可。 部分代码如下所示:

package com.ef.smallstar.unitmap.widget;

import android.content.res.Resources;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.ef.smallstar.EFApplication;
import com.ef.smallstar.R;

/**
 * Created by ext.danny.jiang on 17/4/17.
 *
 * A Widget currently used in the UnitMap, shown as a CIRCLE shape
 * if text not null, there would be a text drawn in the center of the circle
 */

public class CircleActor extends Actor {

  private float centerX;
  private float centerY;
  private String text;
  private float radius;

  private ShapeRenderer sr;
  private BitmapFont bitmapFont;

  public CircleActor(float x, float y, float radius) {
    this(x, y, radius, null);
  }

  public CircleActor(float x, float y, float radius, String text) {
    this.centerX = x;
    this.centerY = y;
    this.radius = radius;
    this.text = text;

    sr = new ShapeRenderer();
  }

  @Override
  public void act(float delta) {
    super.act(delta);
  }

  @Override
  public void draw(Batch batch, float parentAlpha) {
    ...

    batch.end();

    sr.setProjectionMatrix(batch.getProjectionMatrix());
    sr.setTransformMatrix(batch.getTransformMatrix());

    sr.begin(ShapeRenderer.ShapeType.Filled);

    sr.circle(centerX, centerY, radius);

    sr.end();

    batch.begin();

    ...
  }

然后创建一个Stage对象,并将CircleActor对象添加到Stage中即可显示。 但是无法给此CircleActor对象添加一个ClickLitener监听。

例如如下代码:

Stage stage = new Stage();

CircleActor ca = new CircleActor(100, 100, 50, "Hello World");
ca.addListener(new ClickListener(){
  public void click(){
    Gdx.app.log("TAG", "ca is clicked");
  }
})

stage.add(ca);

上述代码中的click方法永远无法被调用! 后续调了大半天之后终于弄清楚了原因:虽然在CircleActor的draw方法中通过ShapeRenderer.circle方法将一个圆画到了屏幕上的某一位置,但是此ShapeRenderer其实和Actor之间并没有太多的联系。唯一的联系就是以下两句代码, 意思应该是将ShapeRenderer的camera和Actor对象一致。

sr.setProjectionMatrix(batch.getProjectionMatrix());
sr.setTransformMatrix(batch.getTransformMatrix());

但是此时,CircleActor并没有设置真正的大小与位置, 因此解决上述问题,需要在构造器中将CircleActor的大小和位置与ShapeRenderer做到一致 !!

如下代码所示,只要添加两行代码即可:

public EfCircle(float x, float y, float radius, String text) {
    this.centerX = x;
    this.centerY = y;
    this.radius = radius;
    this.text = text;

    //解决ShapeRenderer无法获取Touch事件
    setPosition(centerX - radius, centerY - radius);
    setSize(radius * 2, radius * 2);

    sr = new ShapeRenderer();
  }

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android中Libgdx使用ShapeRenderer解决Touch事件  # Android  # shapeRendere解决Touch事件的问题  # 详解Android Libgdx中ScrollPane和Actor事件冲突问题的解决办法  # Android使用libgdx实现模拟方向键控制角色移动的方法  # Android 游戏引擎libgdx 资源加载进度百分比显示案例分析  # Android drawable微技巧  # 你不知道的drawable细节  # Android指纹识别API讲解  # 一种更快更好的用户体验  # Android在Kotlin中更好地使用LitePal  # Android Studio轻松构建自定义模板的步骤记录  # 详解Android 检测权限的三种写法  # Android最简单的状态切换布局实现教程  # android自定义环形对比图效果  # Libgdx解决部分Android机型锁屏崩溃的方法  # 自定义  # 所示  # 创建一个  # 太多  # 如有  # 大半天  # 希望能  # 并将  # 两句  # 谢谢大家  # 装在  # 弄清楚  # 两行  # 画一  # 主要是  # 应该是  # 疑问请  # 实现了  # 器中  # 屏幕上 


相关文章: 如何在新浪SAE免费搭建个人博客?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  css网站制作参考文献有哪些,易聊怎么注册?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  深圳网站制作案例,网页的相关名词有哪些?  建站主机解析:虚拟主机配置与服务器选择指南  制作农业网站的软件,比较好的农业网站推荐一下?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  网站制作话术技巧,网站推广做的好怎么话术?  电商网站制作公司有哪些,1688网是什么意思?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何快速上传自定义模板至建站之星?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何在建站之星网店版论坛获取技术支持?  宝塔面板如何快速创建新站点?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站之星logo尺寸如何设置最合适?  广德云建站网站建设方案与建站流程优化指南  实例解析Array和String方法  网站按钮制作软件,如何实现网页中按钮的自动点击?  公司网站设计制作厂家,怎么创建自己的一个网站?  网站制作网站,深圳做网站哪家比较好?  C#怎么创建控制台应用 C# Console App项目创建方法  如何彻底删除建站之星生成的Banner?  建站之星ASP如何实现CMS高效搭建与安全管理?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何快速生成ASP一键建站模板并优化安全性?  Swift中swift中的switch 语句  佛山企业网站制作公司有哪些,沟通100网上服务官网?  建站主机是否等同于虚拟主机?  网站企业制作流程,用什么语言做企业网站比较好?  如何快速搭建高效WAP手机网站吸引移动用户?  如何在宝塔面板中创建新站点?  自助网站制作软件,个人如何自助建网站?  大连 网站制作,大连天途有线官网?  内部网站制作流程,如何建立公司内部网站?  全景视频制作网站有哪些,全景图怎么做成网页?  定制建站哪家更专业可靠?推荐榜单揭晓  C++时间戳转换成日期时间的步骤和示例代码  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  高防服务器租用指南:配置选择与快速部署攻略  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站主机功能解析:服务器选择与快速搭建指南  网站制作软件有哪些,制图软件有哪些?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  网站制作服务平台,有什么网站可以发布本地服务信息?  如何快速查询网址的建站时间与历史轨迹? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。