您的位置:首页 > 移动开发 > Android开发

android移植屏幕多分辨率的一种解决方案

2012-01-12 12:01 218 查看
  最近在移植android,由于android手机分辨率很多,同事给说了一种解决方案
  游戏的ui会填充整个屏幕,拉伸ui是按照其长宽比拉伸的所以不会失真,当然必然会有一部分ui的x轴或是y轴会有一部分不能显示;这样就要动态的根据屏幕的长宽来改变游戏界面中按钮等的位置,使得这些东西不会被显示到屏幕以外的某个地方。
  





  第一个场景上下(也有可能左右)有些地方被拉升到屏幕外面,第二个场景的上面下面的按钮都根据屏幕和ui(也可以说是layer的长宽)与ui拉伸的比率确定哪些按钮的位置(没用别人的封装的那个类时自己写弄得比较晕乎,因为setPostion的那个坐标系是拉伸前的,要根据拉伸后的把屏幕放在它的中央位置,找到零点(屏幕左下角)这里假设y轴会出去的话,零点到拉伸后图片的距离除以ui的拉伸率就得出若想拉伸后按钮还在屏幕左下角应该设置的position应该是多少——没亲自实验成功,在windows下ndk不知道怎么调试)。参考

CCSprite* test_sprite = new CCSprite;
test_sprite->initWithFile("CloseNormal.png");
test_sprite->setAnchorPoint(ccp(0,0));
test_sprite->setPosition(ccp(0, (320* CCDirector::sharedDirector()->getOpenGLView()->getScreenScaleFactor() - CCDirector::sharedDirector()->getWinSizeInPixels().width)/
CCDirector::sharedDirector()->getOpenGLView()->getScreenScaleFactor()/2) );
// 320是图片的高度,也是android设置view的高度view->create(480,320); x是0 对于这个例子来说y轴会拉神。
addChild(test_sprite, 20);
test_sprite->release();




  经过测试,自己想的是对的,这种难调试的程序还是先写简单的测试程序吧!
  一开始,就用这种方法直接改ui,由于代码可能许多地方修改了坐标值,导致总是成功不了,以至于不知道是哪里的问题,连自己设置坐标的方法都怀疑;由此可见调试程序也要用控制变量法,一个个解决。

  20120113今天在androidpad上运行这个程序发现,CloseNormal.png位置不对;看来自己的理解有一定的偏差,我找找问题出现在哪里;windows下不能调试啊!!只能一遍遍的试。

write by fgd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: