移动端上下拖动调整顺序效果_iOS游戏RPG队伍角色任意拖拽调整顺序的超赞效果...

9f733a4bdc3bfe979d51ac90a01da5a2.png

上一篇中我们实现了队伍实现拖尾效果,但是在实际游戏中我们往往需要根据不同的角色能力,角色职业对角色队伍进行排序,而且希望排序后的效果能立即在游戏地图场景中反应出来.

所以在本篇文中我们就来看看如何实现调整角色顺序并且立即刷新在地图中显示的功能.

7c0afdb0cccb639c5f661517816ba4a6.gif

可以看到我们在将角色Panda从队列头部移至第3位后,地图上角色队列也立即发生了改变.

首先打开SpriteBuilder,将界面调整如下:

c6932db509b7aefa6e019aa61cf5b285.png

注意左侧竖排4个按钮每个上面都有一个对应的sprite和label对象.

为了实现在游戏界面上任务的拖拽,我们有很多方法,我这里使用了UIKit中UIButton可以添加手势的特点.在每个UIButton中添加一个长按手势.但是CCButton默认是不支持手势添加的,所以我们必须动态添加4个UIButton按钮,So,Let’s Do it!!!

在Xcode中添加initUIBtns方法:

-(void)initUIBtns{ UIButton *uiBtn; CCButton *btn; for (int i = 0; i < _btns.count; i++) { uiBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn = _btns[i]; CGRect rect = btn.boundingBox; CGPoint pos = [_peopleLayoutBox convertToWindowSpace:rect.origin]; pos.y -= btn.boundingBox.size.height; rect.origin = pos; uiBtn.frame = rect; [[CCDirector sharedDirector].view addSubview:uiBtn]; [_uiBtns addObject:uiBtn]; [uiBtn addTarget:self action:@selector(uiBtnCallback:) forControlEvents:UIControlEventTouchDown]; uiBtn.tag = i; UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLongPress:)]; longPress.minimumPressDuration = 0.8; [uiBtn addGestureRecognizer:longPress]; }}

代码主要功能如下:

1.依次读取每个CCButton的位置

2.在该位置处新建一个”透明”的UIButton

3.给该按钮添加手势识别器和press回调方法

在press回调方法中手动调用原CCButton的回调方法,这个比较简单,然后在手势识别器长按的回调中处理角色sprite的拖拽功能:

-(void)btnLongPress:(UILongPressGestureRecognizer*)gr{

// 代码略长,这里不全部贴出了...其实主要是怕掉粉啊!!!

}

以上代码首先转换坐标类型,然后找到长按对应的按钮,从而取得对应的sprite.接着在触摸拖动时判断是否移出了当前界面的范围,如果是则sprite归位,否则sprite跟随触摸一起移动.

最后当长按完成时判断是否发生sprite之间的交换,如果是则完成交换功能,否则sprite同样回到原来的位置.

在交换功能中,我们同样要修改内部的数据结构已完成数据的修改,就像MVC机制一样.最后在界面层关闭时,我们重新给游戏队伍在大地图上排序.

因为你可能修改了队伍的顺序,所以我们也要修改地图中显示的顺序.

f642fe7ee06e5090508644359be06762.gif

这样一个重排序的功能就完成了,是不是很有成就感呢 ;)

489b035a75faedc4a4d9554d106ad75f.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值