项目总结 :木门app(2015.4.10 —— 2015.5.8)

来源:互联网 发布:twemproxy源码分析 编辑:程序博客网 时间:2024/06/11 09:00

4月10号时,老板通知说要做一个木门展示的app,使用平台是iPad,参考app为一一木门、金凯德之类的,简单来说,就是在场景中替换门。

讨论的时候有两个方案:

  1. 使用3D模型,换门、换门套线、换踢脚线、换地板、换墙纸,功能强大。
  2. 使用图片替换,只换门,简单。

个人感觉方案一比较正派,所以决定使用方案一。但是由于从来没有搞过模型这一块儿,纠结了很久。

一开始下载了cocos2d-x的换装demo,跑起来看看,感觉挺顺的。代码一看,全是c++的。c++这个玩意儿,还是大二的事儿,后来就从来没碰过,全部还给老师了。

然后有个同学是做游戏的,用的unity3D,咨询一番后,下载了unity5的个人版,试了试。同样也找到了一个游戏人物换装、换武器的demo,看上去也比较顺。于是开始折腾unity3D。

花了很长时间做2D的界面,能跑起来,看着也比较开心。 但是等到模型过来的时候,遇到了很大的困难。

首先是模型的格式,设计师使用的是3dMax,导出来给我的是fbx格式,但是导入unity的时候,贴图都不见了,再一个个贴上去。 

其次,有些游戏对象的方向乱了,莫名其妙就y轴、或者z轴转了90度,甚至转了180度,乱七八糟的,我也没找到规律。只是又把它转过来,按照设计师的效果图摆正了。

如果只是贴图和方向,麻烦点也就算了 ,但是贴出来的效果,颜色什么的都跟设计师给的效果图是不一样的,这可麻烦了。怎么调颜色?

另外,灯光也不兼容,要怎么加灯光?折腾了好几天,还是只会加Directional light,还死活调不到自己想要的效果。

最终的问题是,怎么渲染?网上看了写shader的教程,看得头晕脑胀。加上5月10号就要给出demo,5月20号就要正式使用,时间越是紧迫,越是定不下心来安心研究。

无奈之下,4月28日正式放弃方案一,还是使用简单方案,直接替换图片。

使用xcode6、Objective-C,这就熟门熟路了,确实容易很多,加上storyboard的神速,很快页面就撘起来了。重新找了个设计师,将渲染完成的图给我们,直接使用2个ImageView,一个显示场景,一个显示门,替换的时候,替换image就可以了。

五一过后,5月5号,通知说,下个项目要开始了。几番讨论后决定,5月11号加入新项目组。那么这个项目5月8号就要结束,说起来,只有一周的时间。老板很通情达理的尽量简化了,第一版数据都是固定的,不需要跟服务器交互。有些遇到的问题,也是怎么简单怎么来。

项目的数据主要靠两个plist文件,一个是门,一个是场景。

门:


dc_id门的idname门的名字image门的图片名字type门的类型:0平开,1双开open打开方式specification规格


场景:

name场景名字originX左上角x坐标originY左上角y坐标width宽度height高度best_fit_door默认使用的门的名字type场景类型(卧室、客厅、厨房、书房、卫生间、双开门场景)

列表全部使用CollectionView,发现collection view真的很好用呢。

分页滑动,直接使用scrollview的page enabled。

项目中也遇到了一些问题:

1. 不能直接显示collectionview的某一页。

在viewdidload里面,延迟了0.25秒,代码执行selectItemAtIndex操作,以及didSelectItemAtIndex。 强制滑动到某一项。

//场景    [self.sceneCollectionView scrollToItemAtIndexPath:self.currentSceneIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically|UICollectionViewScrollPositionCenteredHorizontally animated:YES];    [self.sceneCollectionView selectItemAtIndexPath:self.currentSceneIndexPath                                           animated:YES                                     scrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically];    
//再延迟0.25秒后执行    [self collectionView:self.sceneCollectionView didSelectItemAtIndexPath:self.currentSceneIndexPath];

这样做的结果是,每次进入体验场景页面时,都会先显示第一个,然后嗖的一下,哗啦啦滑到指定的一项,体验很不好。但是目前没找到好办法,能直接显示某一项。

曾经想过,如果点击某一个场景,那就重新排个序,把它放到第一个,这样就默认还是显示第一个。但是如果是这样的话,滑动最好做成首尾相连的那种,否则会很奇怪。目前也没有其他更好的办法。

2. 门的大小、位置不固定,滑动的时候,下一张或者上一张会先显示一个错误的位置,然后轻轻滑动后,才显示正确的位置。

门的ImageView也是放在storyboard里面的,只能放置一个位置,然后代码中在 cellForItemAtIndexPath 和 didSelectItemAtIndex 中再修改frame,这样一次滑完一页的时候,是正常显示的,但是如果滑动时,拖住当前页不放,直接看上一页或者下一页的话,门的位置一开始是storyboard中设置的默认位置,而不是实际的位置,等滑过来,执行了didSelectItemAtIndex之后,才会恢复到正常的位置。

改来改去,最终是把门的ImageView在storyboard中隐藏,显示的时候再设置hidden=NO,这样同样,慢慢滑动的时候,有一段会不显示门,过一会儿才会显示出来。虽然体验也很恶心,但是至少比错误位置的门稍微好一些。

3. 门选中的动画效果有时候不触发。

这个是因为,选中这个动作是在didSelectItemAtIndexPath中完成的。由于没有找到collection view显示完成的监听,所以是在viewdidload里面延迟了0.25秒执行SelectItemAtIndexPath,然后再延迟0.25秒执行didSelectItemAtIndexPath。 第二次延时是因为,发现直接调用的话,collection view一开始只显示一屏以内的数据,若是我指定了一屏以外的数据显示,那么会先调用cellForItemAtIndexPath,此时,如果我立马调用didSelect,那么就会出现,cell还没生成,就已经执行了didSelect,所以动画效果就没了。

也尝试了在cellForItemAtIndexPath里面,直接判断,如果是选中的cell就执行动画。但是发现在执行了之后,还是还原了。所以暂时还是延迟执行的。


======================= 分割线 ========================

今天是项目的最后一天,很多地方还来不及优化。等第二期的时候,希望能解决上述问题。


0 0
原创粉丝点击