cocos2d-x 3.3 之卡牌设计 NO.1 点击选取卡牌

接下来要做的是一个卡牌游戏,难度会比黑白棋高一些。

要先实现的是点击选取卡牌。


一:

玩家手上的卡牌不仅只有一张,那么我们就必须考虑到玩家点击移动的是哪张牌,以下是我的实现方法:

1.首先在游戏类里定义一个卡牌vector :Vector<OpenCard *> openSprites;

2.

    for(int i =1; i <= 5; ++i)
    {
	OpenCard* card = OpenCard::create("card_face.png", "card_back.png", i);
        this->addChild(card);
        openSprites.pushBack(card);
    }
每次发五张牌(处于设计阶段所以创建的5张牌都是一样的,另外创建的时候会自动定位,不会重叠在屏幕上),将这5张牌加进容器中

3.在onTouchBegan里加如下两句

    Point touchpoint=touch->getLocation();//获取鼠标点击位置
    this->selectSpriteForTouch(touchpoint);//选取精灵函数
4.以下是selectSpriteForTouch函数

	int x,y;
	x=(int)touchpoint.x;
	y=(int)touchpoint.y;//忽略这2句的类型转换,这是个不好的习惯,将点击坐标转换为int后输出发现是一串奇怪的数字,至今还不知道为什么
    for (OpenCard *sprite : openSprites)//在容器中遍历卡牌精灵
    {
		if (sprite->card_isTouched(x,y) && sprite->isOpend==0)//如果点击的区域存在精灵&&这个精灵没有被翻开过
        {
			CCLOG("open a card");
			isTouchCard=1;
			sprite->card_set_openCard();
			sprite->isOpend=1;

            Open_sel = sprite;
            break;
        }
		else if(sprite->card_isTouched(x,y) && sprite->isOpend==1)//这里是卡牌移动用的
		{
			isTouchMove=1;
			sprite->card_setsize_big(2);
			sprite->setZOrder(100);
			Open_sel=sprite;
			break;
		}
    }
bool OpenCard::card_isTouched(int x,int y)
{
	Point point;
	point=card_set_locate();
	int px,py;
	px=(int)point.x;
	py=(int)point.y;
	if(x>px-90 && x<px+90 && y>py-125 && y<py+125)
	{
		return true;
	}
	return false;
}

这里先不讨论翻转卡牌和移动卡牌。在容器中遍历一次精灵后若发现符合的精灵,那么这个精灵就被选中了(Open_sel = sprite;)Open_sel也是在游戏类中定义的一个卡牌指针,它指向选择的精灵,当然在onTouchEnded的时候要指向空,否则可能会出错或者出现自己不想要的现象。


这样就能选取卡牌了,下次说说怎么移动精灵




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值