当前位置:  编程技术>移动开发
本页文章导读:
    ▪edittext设立字数限制        edittext设置字数限制 EditText可以在XML和代码中设置字数限制。。 在XML中: Xml代码  android:maxLength=“50”  代码中: Java代码  editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)});  ......
    ▪ UIInterfaceOrientation跟UIDeviceOrientation的区别        UIInterfaceOrientation和UIDeviceOrientation的区别 UIInterfaceOrientation和UIDeviceOrientation长得是又长又像,长久时间我根本没有区分这两个类型,肯定也混用了无数,直到我现在处理的一个问题,明明是横.........
    ▪ 运用libgdx及其中的box2d 2.1的注意事项       使用libgdx及其中的box2d 2.1的注意事项 关于libgdx和box2d的图形 在libgdx的stage或者spriteBatch里画图.图的对称点是左下角. 在libgdx的TextureRegion从Texture里取需要的区域时,图的对称点是左上角. 在box2d.........

[1]edittext设立字数限制
    来源: 互联网  发布时间: 2014-02-18
edittext设置字数限制
EditText可以在XML和代码中设置字数限制。。

在XML中:


Xml代码 
android:maxLength=“50” 

代码中:


Java代码 
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)}); 

    
[2] UIInterfaceOrientation跟UIDeviceOrientation的区别
    来源: 互联网  发布时间: 2014-02-18
UIInterfaceOrientation和UIDeviceOrientation的区别

UIInterfaceOrientation和UIDeviceOrientation长得是又长又像,长久时间我根本没有区分这两个类型,肯定也混用了无数,直到我现在处理的一个问题,明明是横/竖屏的情况,控件却是以竖/横的布局展示,而且我在模拟器上怎么都搞不出来,而测试稍微把机器转转圈就能重现这个现象。

 

那么定位的方向很明确,肯定是在willRotateToInterfaceOrientation之类的函数里咯。于是我看到了这样的代码

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
...
CGRect rect;
if ( ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ||
	[[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown ) {
	rect = HRECT;
    }
    else {
	rect = VRECT;
    }
[alertView setFrame:rect];
...
}

 乍一看其实也没什么,竖屏的时候就用竖屏的frame布局,此外就用横屏的布局,这没有什么问题啊。然后我抱着试试看的心里,跳到了UIDeviceOrientationPortrait的定义,突然发现这个枚举值竟然有七个,除了一个unknown之外,还有上下,左右,翻盖这六种。这个时候我才注意到,程序里用的类型是UIDeviceOrientation,而切换横竖屏的函数的参数实际上是UIInterfaceOrientation,这可把我吓出一身冷汗,以前从来没注意过,都是随便找之前写的代码抄过来判断横竖屏的,那么一旦误用会有多少问题啊。于是我找了一下资料,来源主要是这里 。

 

而且两者除了区别还有联系,打开头文件大家也可以看到

typedef enum {
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;

 也就是意味着竖屏的时候两者的值是完全对应,而横屏的时候相反的对应关系则反应了向左摇的时候,设备正好是朝着右边的,也有人说HOME在右边。

 

还有就是UIDeviceOrientation一定会根据设备当前的位置朝向而改变,但UIInterfaceOrientation则未必,比如你根本不让设备转动的话,那么怎么都是获得到UIInterfaceOrientationPortrait这个值的。

 

如果你的设备支持摇动,那么直接在willRotateToInterfaceOrientation的函数里根据参数即可获得当前状态,而万一遇到新界面没有获得摇动消息却要确定当前状态,那就用[UIApplication sharedApplication].statusBarOrientation写在viewWillAppear之类的函数里。当然最方便最合适的做法是用UIInterfaceOrientationIsPortrait和UIInterfaceOrientationIsLandscape两个预设宏。

 

 


    
[3] 运用libgdx及其中的box2d 2.1的注意事项
    来源: 互联网  发布时间: 2014-02-18
使用libgdx及其中的box2d 2.1的注意事项

关于libgdx和box2d的图形

在libgdx的stage或者spriteBatch里画图.图的对称点是左下角.

在libgdx的TextureRegion从Texture里取需要的区域时,图的对称点是左上角.

在box2d里body,图的对称点是中心(可能符合物理的重心吧).

还有在libgdx里面.导入的Texture图片.一定要是2的幂数.即2,4,8....1024.

如果想导入不是2的幂数的图片.只能把它放在一个符合2的幂数的Texture里面.再使用TextureRegion从该Texture里提取所需要的区域.

 

创造一个世界:

Vector2 gravity = new Vector2(0.0f, -1f);//设置世界的引力,如果游戏是顶级图的,则都设为0则可.
boolean doSleep = true;//是否允许刚体睡眠.最好true
World world = new World(gravity, doSleep);//创建世界

 

刚体共有三种类型,分别是staticBody,dynamicBody以及kinematicBody
其含意分别是指,静态刚体(即不受力影响的物体,比如边界墙),动态刚体(完全模拟真实物理情况的物体),运动刚体(这是2.1版新增的一个类型,和静态刚体相比,就是它可以移动.它也同样不会被环境力所影响)

 

创建一个刚体:

BodyDef bd = new BodyDef();
bd.type = BodyDef.BodyType.DynamicBody;//指定刚体的类型,默认为静态.
bd.position.set(x, y);//x和y指出刚体初始的位置.

Body b = world.createBody(bd);//刚体一定要通过world的createBody来创建,不能new.

b.setUserData(data);//设定刚体的用户数据.

PolygonShape p = new PolygonShape();
p.setAsBox(8.0f, 8.0f);//指定形状为长方形.

p.set(new Vector2[]{new Vector2(0,1),new Vector2(-1,0),new Vector2(1,0)});指定三角形,也可以指定更多Vector2,为多边形.多边形最多有8个边,并且多边形必须是凸边形.当然,你也可以使用组合来形成更为伪凹边形或者更复杂的形状.但最好请使用逆时针顺序.

FixtureDef f = new FixtureDef();
f.shape = p;//夹具的形状
f.density = 1.0f;//夹具的密度
f.friction = 0.3f;//夹具的摩擦力
b.createFixture(f);//刚体创建夹具.

 

刚体的createFixture有两种形式:

createFixture(Shape shape, float density)//传入形状Shape和它的密度.
createFixture(FixtureDef def)//传入夹具的定义,在传入前,已经定义好它的形状和密度等属性.

 

密度是用于计算刚体的质量属性的.就是说密度越大,该刚体越重.

摩擦力被用于使物体们在彼此间逼真的滑动.如一个刚体的摩擦力越大,撞在墙上反弹得越远.如果摩擦力小,撞在墙上可能会沾着墙一直滑动.

 

一个刚体可以创建多个夹具.如为一个世界创建四个边:

游戏在手机分辨率854*480且打横时运行.

BodyDef groundBodyDef = new BodyDef();
groundBodyDef.position.set(0, 0);
Body groundBody = world.createBody(groundBodyDef);
groundPolygonShape = new PolygonShape();


groundPolygonShape.setAsEdge(new Vector2(0, 480), new Vector2(0, 0));//使形状为边,左边.
groundBody.createFixture(groundPolygonShape, 0);


groundPolygonShape.setAsEdge(new Vector2(854, 480), new Vector2(854, 0));//右边
groundBody.createFixture(groundPolygonShape, 0);


groundPolygonShape.setAsEdge(new Vector2(0, 480), new Vector2(854, 480));//上边
groundBody.createFixture(groundPolygonShape, 0);


groundPolygonShape.setAsEdge(new Vector2(0, 0), new Vector2(854, 0));//下边
groundBody.createFixture(groundPolygonShape, 0);

 

开始模拟:

float timeStep = 1.0f / 60.0f;//刷新时间粒度
int velocityIterations = 6;//速度计算层级
int positionIterations = 2;//位置计算层级

world.step(timeStep, velocityIterations, positionIterations);//在这个Step方法中进行了碰撞的检测,速度的更新等操作,模拟要在一个循环里,才能持续

 

碰撞检测:

如果没有自定义设定world.setContactFilter.则box2d的碰撞是自动的.那么在碰撞后需要执行行为,要怎么做呢.我们可以通过world.setContactListener来检测碰撞,该接口有两个函数,endContact和beginContact,任何刚体开始碰撞都会执行beginContact,结束碰撞都会执行endContact.,参数Contact则是当前的碰撞,通过Contact.getFixtureA获得创建时间比较早的对象,Contact.getFixtureB获得创建时间晚的对象.然后大家可以在这两个函数里加上自定义的东西了.

 

碰撞过滤:

碰撞过滤的意思是我们可以指定哪些刚体会碰撞,哪些不会.如果没有设定world.setContactFilter.则使用默认的过滤,即全部刚体都会发生碰撞,ContactFilter这个接口里只有一个函数shouldCollide,字面意思就是"应该碰撞",是返回boolean类型的,我们就知道如果需要碰撞则返回true,不需要碰撞则返回false.函数有两个Fixture夹具.当两个刚体碰撞时,创建时间较早的是fixtureA,晚的是fixtureB.Fixtrue内置的filter也有相同的功能,但是有了ContactFilter后,也就不需要用了.

 

关于world的create和destroy要注意:

在游戏中create和destroy刚体或者关节的时候,记得要检测world锁的状态,否则有时候会出现错误isLocked()==false.因为当在world模拟step的时候,world.isLocked()是为true的,world无法create或者destroy.而此时我们又执行create或者destroy,所以就会出现错误了.

还有create和destroy不能在callbacks里面.否则也会出现上面的错误.在destroyBody函数的说明里有:This function is locked during callbacks. 此函数在callbacks里是上锁的,也就是不能使用的.callbacks就是如ContactListener里的beginContact函数,也就是被动执行的函数,被称为callbacks.

所以我们一定要在world.isLocked()==false的时候才能执行create和destroy.

在执行create和destroy前应该检测锁的状态:

if(world.isLocked())

    return;//or do something else

 

Gdx中处理输入:

在Gdx中如果我们需要对输入有相应的操作,则应该Gdx.input.setInputProcessor.InputProcessor是输入处理器接口.里面包括了我们需要的各种回调函数callbacks.

touch类的:touchUp,touchMoved,touchDragged,touchDown;

key类的:keyUp,keyTyped,keyDown;

还有一个scrolled;//Called when the mouse wheel was scrolled. Will not be called on Android.

1 楼 tonyzzp 2011-07-29  
最近在看libgdx
也没啥文档  不好学啊
2 楼 kongweile 2011-07-31  
tonyzzp 写道
最近在看libgdx
也没啥文档  不好学啊

嗯.超级悲剧的...
3 楼 qxinghui 2011-09-22  
很好的文章
有很多不是很明白
Sprite和你这里说的刚体有什么不同呢?
怎么给刚体指定个图片呢???
4 楼 javalover00000 2011-11-24  
好文章,正准备学习一下Libgdx的 box2d呢。请问下“夹具”是个什么概念?
5 楼 kongweile 2011-11-24  
javalover00000 写道
好文章,正准备学习一下Libgdx的 box2d呢。请问下“夹具”是个什么概念?

夹具就是刚体的物理性质,如形状,密度,摩擦力等.
6 楼 javalover00000 2011-11-25  
kongweile 写道
javalover00000 写道
好文章,正准备学习一下Libgdx的 box2d呢。请问下“夹具”是个什么概念?

夹具就是刚体的物理性质,如形状,密度,摩擦力等.

哦~ 明白了,Shape定义形状,Fixture定义物理性质,然后生成一个Body 就是一个物体了!
7 楼 kongweile 2011-11-25  
javalover00000 写道
kongweile 写道
javalover00000 写道
好文章,正准备学习一下Libgdx的 box2d呢。请问下“夹具”是个什么概念?

夹具就是刚体的物理性质,如形状,密度,摩擦力等.

哦~ 明白了,Shape定义形状,Fixture定义物理性质,然后生成一个Body 就是一个物体了!

right~so smart~
8 楼 dickycat 2012-08-09  

学习了,最近正在学这一块,年纪大了,学起来有点吃亏!

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3