android游戏开发框架libgdx的使用5.docx

上传人:b****5 文档编号:3237499 上传时间:2022-11-20 格式:DOCX 页数:16 大小:77.40KB
下载 相关 举报
android游戏开发框架libgdx的使用5.docx_第1页
第1页 / 共16页
android游戏开发框架libgdx的使用5.docx_第2页
第2页 / 共16页
android游戏开发框架libgdx的使用5.docx_第3页
第3页 / 共16页
android游戏开发框架libgdx的使用5.docx_第4页
第4页 / 共16页
android游戏开发框架libgdx的使用5.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

android游戏开发框架libgdx的使用5.docx

《android游戏开发框架libgdx的使用5.docx》由会员分享,可在线阅读,更多相关《android游戏开发框架libgdx的使用5.docx(16页珍藏版)》请在冰豆网上搜索。

android游戏开发框架libgdx的使用5.docx

android游戏开发框架libgdx的使用5

android游戏开发框架libgdx的使用(五)--舞台和常用UI类

常用的UI类包括标签,按钮,勾选框,下拉框,图片,输入框,列表,滑动面板,滑条,分割面板。

它们都在com.badlogic.gdx.scenes.scene2d.ui包中,都属于Actor,可以方便的纳入舞台的管理中。

其实仔细看看UI类的实现代码不难发现其实它们都是大部分继承自Widget或者Table,如果需要自定义UI可以继承以上两个类(它们继承自Actor),这里要说明一下libgdx的布局部分使用了TWL,有兴趣的朋友可以去看看。

在介绍每个控件之前我们先来看一下NinePatch,这是最近的一个比较重大的更新。

何为NinePatch?

其实android原生即有NinePatch类,常在按钮中使用。

如图,将图片分成九份。

中间部分可以根据需要扩大,使按钮的大小内容变动不受图片的限制。

而在libgdx的NinePatch其实就是九个TextureRegion对象。

常用的实例化方法有两个:

?

publicNinePatch(Texturetexture,intleft,intright,inttop,intbottom)

 

publicNinePatch(TextureRegionregion,intleft,intright,inttop,intbottom)

关于其中的四个int型参数如何取值我们可以参考一下源码:

?

publicNinePatch(TextureRegionregion,intleft,intright,inttop,intbottom){

        intmiddleWidth=region.getRegionWidth()-left-right;

        intmiddleHeight=region.getRegionHeight()-top-bottom;

        this.patches=newTextureRegion[]{newTextureRegion(region,0,0,left,top),

            newTextureRegion(region,left,0,middleWidth,top),newTextureRegion(region,left+middleWidth,0,right,top),

            newTextureRegion(region,0,top,left,middleHeight),newTextureRegion(region,left,top,middleWidth,middleHeight),

            newTextureRegion(region,left+middleWidth,top,right,middleHeight),

            newTextureRegion(region,0,top+middleHeight,left,bottom),

            newTextureRegion(region,left,top+middleHeight,middleWidth,bottom),

            newTextureRegion(region,left+middleWidth,top+middleHeight,right,bottom)};

    }

先计算中间部分的宽度和高度。

然后开始切图,首先取顶部的最左边的那个,即图中编号1的那块,然后去它右边的,然后再右边的。

取完最上边的那行,然后取中间的那行,然后取最后一行的。

由上自下,由左自右。

而在绘制时又是如何处理的呢?

看源码:

?

publicvoiddraw(SpriteBatchbatch,floatx,floaty,floatwidth,floatheight){

        floatcenterColumnX=x;

        if(patches[BOTTOM_LEFT]!

=null)

            centerColumnX+=patches[BOTTOM_LEFT].getRegionWidth();

        elseif(patches[MIDDLE_LEFT]!

=null)

            centerColumnX+=patches[MIDDLE_LEFT].getRegionWidth();

        elseif(patches[TOP_LEFT]!

=null)//

            centerColumnX+=patches[TOP_LEFT].getRegionWidth();

 

        floatrightColumnX=x+width;

        if(patches[BOTTOM_RIGHT]!

=null)

            rightColumnX-=patches[BOTTOM_RIGHT].getRegionWidth();

        elseif(patches[MIDDLE_RIGHT]!

=null)

            rightColumnX+=patches[MIDDLE_RIGHT].getRegionWidth();

        elseif(patches[TOP_RIGHT]!

=null)//

            rightColumnX+=patches[TOP_RIGHT].getRegionWidth();

 

        floatmiddleRowY=y;

        if(patches[TOP_LEFT]!

=null)

            middleRowY+=patches[TOP_LEFT].getRegionHeight();

        elseif(patches[TOP_CENTER]!

=null)

            middleRowY+=patches[TOP_CENTER].getRegionHeight();

        elseif(patches[TOP_RIGHT]!

=null)//

            middleRowY+=patches[TOP_RIGHT].getRegionHeight();

 

        floattopRowY=y+height;

        if(patches[TOP_LEFT]!

=null)

            topRowY-=patches[TOP_LEFT].getRegionHeight();

        elseif(patches[TOP_CENTER]!

=null)

            topRowY-=patches[TOP_CENTER].getRegionHeight();

        elseif(patches[TOP_RIGHT]!

=null)//

            topRowY-=patches[TOP_RIGHT].getRegionHeight();

 

        //Bottomrow

        if(patches[BOTTOM_LEFT]!

=null)batch.draw(patches[BOTTOM_LEFT],x,y,centerColumnX-x,middleRowY-y);

        if(patches[BOTTOM_CENTER]!

=null)

            batch.draw(patches[BOTTOM_CENTER],centerColumnX,y,rightColumnX-centerColumnX,middleRowY-y);

        if(patches[BOTTOM_RIGHT]!

=null)

            batch.draw(patches[BOTTOM_RIGHT],rightColumnX,y,x+width-rightColumnX,middleRowY-y);

 

        //Middlerow

        if(patches[MIDDLE_LEFT]!

=null)batch.draw(patches[MIDDLE_LEFT],x,middleRowY,centerColumnX-x,topRowY-middleRowY);

        if(patches[MIDDLE_CENTER]!

=null)

            batch.draw(patches[MIDDLE_CENTER],centerColumnX,middleRowY,rightColumnX-centerColumnX,topRowY-middleRowY);

        if(patches[MIDDLE_RIGHT]!

=null)

            batch.draw(patches[MIDDLE_RIGHT],rightColumnX,middleRowY,x+width-rightColumnX,topRowY-middleRowY);

 

        //Toprow

        if(patches[TOP_LEFT]!

=null)batch.draw(patches[TOP_LEFT],x,topRowY,centerColumnX-x,y+height-topRowY);

        if(patches[TOP_CENTER]!

=null)

            batch.draw(patches[TOP_CENTER],centerColumnX,topRowY,rightColumnX-centerColumnX,y+height-topRowY);

        if(patches[TOP_RIGHT]!

=null)

            batch.draw(patches[TOP_RIGHT],rightColumnX,topRowY,x+width-rightColumnX,y+height-topRowY);

    }

先计算左右栏的宽度,在计算中间和顶部的高度。

然后从下自上的绘制。

说实话我觉得这段代码看着很好玩的。

现在来说说几个常用的控件的使用吧。

先构建一个舞台。

先来试试Label吧,label是有缓存的,所以替换显示内容不是用setText方法,而是使用setWrappedText方法。

代码如下:

?

packageblogs.htynkn.listener;

 

importcom.badl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1