iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android中Libgdx如何使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题
  • 865
分享到

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

androidlibgdx 2023-05-30 20:05:45 865人浏览 独家记忆
摘要

这篇文章给大家分享的是有关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;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自定义Actor解决无法接收到Touch事件的问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Android中Libgdx如何使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题

本文链接: https://www.lsjlt.com/news/221214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作