cocos2dx 实现gallery (一)

本文探讨了如何在Cocos2d-x中创建一个gallery,初始思路是通过记录节点位置并逐个移动,但这种方法限制较多。接着提出将节点距离标准化,简化处理,但可能不符美工预期。最终解决方案是利用3D模拟,通过模拟3D空间中的圆形布局,从特定视角观察,实现预期的画廊效果,并附带了三视图说明。
摘要由CSDN通过智能技术生成

        需要实现一个gallery 。 


        首先,最容易想到的,自然是让美工,摆个位置,大小,然后程序记录下来,每次移动的时候,后面一个节点移动到前一个节点的位置,然后再设置成前一个节点的scale和zOrder。

        这么做,可以解决一些问题。比如这个。这样的gallery,只能一次动一格,因为他是直接把节点设置到前一个节点的位置去。如果你想要图随手走,就比较蛋疼了。因为每个节点直接的间距不一样,第一个个节点移动一半,第二个节点该移动多少?后面的节点怎么控制,怎么在2个E点相互遮挡的时候正确的设置zorder?怎么让这个过程看起来很真实,不突兀?要完成这个要求,需要控制的变量太多,而且不直观,也不好理清逻辑。


        再想上面的问题,不好处理的地方是因为每个节点直接的距离不同,不方便处理中间状态。如果把每个节点的距离处理成一样呢?这样确实比较 计算和处理,但是最后出来的效果可能和美工期望的效果不一样的问题。


        再沿着上面,如果有一个通用的公式,来处理这一系列问题,就简单的多了。


        然后,祭出终极方案 —— 用3D模拟,(虽然我是一个一直做2D完全不懂3D的渣渣,但是尼玛空间几何是高中的课程啊,我觉得简单的应该还是问题不大的。。。)

        先看我们要实现的效果,应该是在3D空间内,有一个圆,圆周放置了很多矩形,我们从某一个点去看这些矩形

        正面看上去应该是这样的

        

        从顶面向下俯视应该是这样的,红色的表示是我们眼睛的方向

        

        从侧面看应该是这样的

        


        如果没记错的话,这个图的表示方法是工程制图里面的三视图,因为我实在是画不出来3D的啊。。。。


        先把需求搞清楚了,然后我们来实现这个东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package e gallery; import android app Activity; import android os Bundle; import android view LayoutInflater; import android view View; import android view ViewGroup; import android view ViewGroup MarginLayoutParams; import android widget AdapterView; import android widget AdapterView OnItemSelectedListener; import android widget BaseAdapter; import android widget Gallery; import android widget ImageView; import e gallery R; public class MainActivity extends Activity implements OnItemSelectedListener { Gallery gallery; ImageView main imageView; ImageView picture imageView; Gesture+ gesture; int[] ids1 { R drawable b R drawable c R drawable d R drawable f R drawable g }; @Override protected void onCreate Bundle savedInstanceState { super onCreate savedInstanceState ; setContentView R layout main ; main imageView ImageView findViewById R id main imageView ; gallery Gallery findViewById R id gallery ; gallery setOnItemSelectedListener this ; 怎么设置从中间开始 gallery setAdapter new MyAdapter ; } class MyAdapter extends BaseAdapter{ @Override public int getCount { return Integer MAX VALUE; } @Override public Object getItem int position { return null; } @Override public long getItemId int position { return 0; } @Override public View getView int position View convertView ViewGroup parent { LayoutInflater layoutInflater LayoutInflater from MainActivity this ; convertView layoutInflater inflate R layout picture null ; picture imageView ImageView convertView findViewById R id picture imageView ; picture imageView setImageResource ids1[position % 5] ; return convertView; } } @Override public void onItemSelected AdapterView< > parent View view int position long id { main imageView setImageResource ids1[position % 5] ; } @Override public void onNothingSelected AdapterView< > parent { } }">package e gallery; import android app Activity; import android os Bundle; import android view LayoutInflater; import android view View; import android view ViewGroup; import android view ViewGroup MarginLayoutParams; import android widget AdapterView; import android widget AdapterView OnItemSelecte [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值