cocos2d-x 3.3 之卡牌设计 NO.1 点击选取卡牌
发布时间:2020-12-14 21:15:13 所属栏目:百科 来源:网络整理
导读:接下来要做的是一个卡牌游戏,难度会比黑白棋高一些。 要先实现的是点击选取卡牌。 一: 玩家手上的卡牌不仅只有一张,那么我们就必须考虑到玩家点击移动的是哪张牌,以下是我的实现方法: 1.首先在游戏类里定义一个卡牌vector :VectorOpenCard * openSprit
接下来要做的是一个卡牌游戏,难度会比黑白棋高一些。 要先实现的是点击选取卡牌。
一: 玩家手上的卡牌不仅只有一张,那么我们就必须考虑到玩家点击移动的是哪张牌,以下是我的实现方法: 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的时候要指向空,否则可能会出错或者出现自己不想要的现象。
这样就能选取卡牌了,下次说说怎么移动精灵 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |