コード例 #1
0
void MySnake::moveSnake(float dt)
{
    MySprite *footSnake = (MySprite *)getChildByTag(getChildrenCount()-2+batchNodeStartTag);
    for (int i=getChildrenCount()-2; i >= 0; i--) {
        MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag);
        MySprite *sprite1 = (MySprite *)getChildByTag(i-1+batchNodeStartTag);
        if (sprite != snakeHeader) {
            sprite->setIndex(sprite1->getIndex()); //setPosition(getChildByTag(i-1+batchNodeStartTag)->getPosition());
        }
        else
        {
            this->moveSnakeHeader();
        }
    }
    
    if (snakeHeader->getIndex() == randomSprite->getIndex()) {
        
        addSnake(footSnake->getIndex());
        changeRandomSpritePozition();
    }
    
    checkGameOver();
    
    isNormal = true;
}
コード例 #2
0
ファイル: UILayer.cpp プロジェクト: hyizsg/mytest1st
void HUILayer::animOutEnd() {
    if (m_pPreEndingLayer) {
        m_pPreEndingLayer->onEnterBackground();
        removeChild(m_pPreEndingLayer);
        m_pPreEndingLayer = NULL;
    }
    m_pCurrentLayer = NULL;
    if (getChildrenCount() < 1) {
        if (m_pQueneRootLayers->count() > 0) {
            HRootLayer *layer = (HRootLayer *)m_pQueneRootLayers->objectAtIndex(0);
            presentRootLayer(layer);
//            addChild(layer);
            m_pCurrentLayer = layer;
//            layer->animIn(NULL);
            m_pQueneRootLayers->removeObjectAtIndex(0);
        }
    }
    updateAllRootLayers();
    HCommonLayer::animOutEnd();
    if (getChildrenCount() > 0) {
        HRootLayer *rootLayer = dynamic_cast<HRootLayer *>(getChildren()->objectAtIndex(getChildrenCount() - 1));
        if (rootLayer) {
            rootLayer->onShowEditbox(true);
            rootLayer->onEnterForeground();
            m_pCurrentLayer = rootLayer;
        }
    }
    if (this == AppDelegate::getInstance()->getGameManager()->getUILayer()) {
        AppDelegate::getInstance()->getGameManager()->onRootLayerCountChanged(getChildrenCount());
    }
}
コード例 #3
0
ファイル: Number.cpp プロジェクト: suli1/suli1-myGame
Node* Number::convert(const char* name, int number, Gravity gravity /* = Gravity::GRAVITY_CENTER */)
{
	auto numbers = _numberContainer.at(name);
	if (number == 0) {
		auto numberZero = Sprite::createWithSpriteFrame(numbers->at(0));
		numberZero->setAnchorPoint(Point(0.5, 0));
		return numberZero;
	}

	auto numberNode = Node::create();
	float totalWidth = 0;
	while(number){
		int temp = number % 10;
		number /= 10;
		auto sprite = Sprite::createWithSpriteFrame(numbers->at(temp));
		totalWidth += sprite->getContentSize().width;
		numberNode->addChild(sprite);
	}

	auto numberZero = Sprite::createWithSpriteFrame(numbers->at(0));
	numberNode->setContentSize(Size(totalWidth, numberZero->getContentSize().height));

	if(gravity == Gravity::GRAVITY_CENTER) {
		float singleWidth = totalWidth/numberNode->getChildrenCount();
		int index = numberNode->getChildrenCount()/2;
		for(auto child : numberNode->getChildren()) {
			child->setAnchorPoint(Point(0.5, 0));
			float offLength = singleWidth*index--;
			child->setPositionX(offLength);
		}
	}else if(gravity == Gravity::GRAVITY_RIGHT) {
		float singleWidth = totalWidth/numberNode->getChildrenCount();
		int index = numberNode->getChildrenCount();
		for(auto child : numberNode->getChildren()) {
			child->setAnchorPoint(Point(1, 0));
			float offLength = singleWidth*index--;
			child->setPositionX(offLength);
		} 
	}else if(gravity == Gravity::GRAVITY_LEFT) {
		float singleWidth = totalWidth/numberNode->getChildrenCount();
		int index = 0;
		for(auto child : numberNode->getChildren()) {
			child->setAnchorPoint(Point::ZERO);
			float offLength = singleWidth*index++;
			child->setPositionX(offLength);
		} 
	}

	return numberNode;
}
コード例 #4
0
void YogaLayoutableShadowNode::appendChild(SharedYogaLayoutableShadowNode child) {
  ensureUnsealed();

  auto nonConstYogaNode = std::const_pointer_cast<YGNode>(yogaNode_);
  auto nonConstChildYogaNode = std::const_pointer_cast<YGNode>(child->yogaNode_);
  nonConstYogaNode->insertChild(nonConstChildYogaNode.get(), nonConstYogaNode->getChildrenCount());
}
コード例 #5
0
bool RandomAccessVerificationGeoOptimizationOperator::validateChildren(){
	// this operator cannot have any children
	if(getChildrenCount() > 0){
		return false;
	}
	return true;
}
コード例 #6
0
void ChoiceLayer::setChoices(vector<string> choices)
{
    size_t btnCount = getChildrenCount();
    size_t choiceCount = choices.size();
	float btnHeight = GlobalConfig::getInstance()->getChoiceMenuFontSize() + 10;
	float spaceBetweenBtn = btnHeight;
	float deltaUnit = btnHeight + spaceBetweenBtn;
	float initHeight = choiceCount % 2 == 0 
		? spaceBetweenBtn*0.5 + (choiceCount / 2 - 1)*deltaUnit
		: spaceBetweenBtn + btnHeight*0.5 + ((choiceCount - 1) / 2 - 1)*deltaUnit;

	if (choiceCount > btnCount)
		for (int i = btnCount; i<choices.size(); i++) {
			auto btn = createButton(i, choices[i]);
		}
	for (int i = 0; i < choiceCount; i++) {
        auto btn = (ControlButton*)getChildByTag(i);
		string choice = choices.at(i);
		btn->setPosition(Vec2(0, initHeight - i*deltaUnit));
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)  
		GBKToUTF(choice);
#endif 
        btn->setTitleForState(choice, Control::State::NORMAL);
		btn->setOpacity(255);
    }
}
コード例 #7
0
void MySnake::addSnake(int index)
{
    MySprite *sprite = MySprite::create(this->getTexture());
    sprite->setAnchorPoint(Point(0, 1));
    sprite->setTag(getChildrenCount()-1+batchNodeStartTag);
    sprite->setIndex(index);
    this->addChild(sprite);
}
コード例 #8
0
ファイル: section.cpp プロジェクト: Rolisteam/RCharacterSheet
CharacterSheetItem* Section::getChildAt(int i) const
{
    if((i<getChildrenCount())&&(i>=0))
    {
        return m_dataHash.value(m_keyList.at(i));
    }
    return NULL;
}
コード例 #9
0
void MySnake::checkGameOver()
{
    for (int i=1; i < getChildrenCount()-1; i++) {
        MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag);
        
        if (sprite->getIndex() == snakeHeader->getIndex()) {
            auto scene = GameOverScene::createScene();
            Director::getInstance()->pushScene(scene);
        }
    }
}
コード例 #10
0
ファイル: FHeader.cpp プロジェクト: jasonsword/FooUI
	FHEADER_INLINE FWidget* FHeader::widgetFromPoint(int xPos, int yPos) const
	{
		/** 此控件不可见 */
		if (!isVisible())
		{
			return NULL;
		}

		/** 此控件不在坐标范围 */
		if (!getLayoutRect().isIntersects(xPos, yPos))
		{
			return NULL;
		}

		FWidget *widgetLast = NULL;
		for (int i = 0; i < getChildrenCount(); ++i)
		{
			FWidget *widget = getChild(i);
			
			if (!widget->isVisible())
			{
				continue;
			}

			FHeaderElement *headerElement = static_cast<FHeaderElement*>(widget->getInterface(FOOWC_HEADERELEMENT));
			if (NULL != headerElement 
				&& headerElement->isSizable() 
				&& headerElement->getLayoutRect().isEmpty())
			{
				// 当列表头项宽度为0时,使能够得到改变宽度的机会(鼠标拉伸)
				if (NULL != widgetLast 
					&& xPos >= widgetLast->getLayoutRect().right
					&& xPos <= widgetLast->getLayoutRect().right + FHEADER_SIZEGRIP_DELTA )
				{
					return widget;
				}
				else if (xPos >= getLayoutRect().left
					&& xPos <= getLayoutRect().left + FHEADER_SIZEGRIP_DELTA)
				{
					return widget;
				}
			}
	
			FWidget *pFindWidget = widget->widgetFromPoint(xPos, yPos);
			if (NULL != pFindWidget)
			{
				return pFindWidget;
			}

			widgetLast = widget;
		}

		return NULL;
	}
コード例 #11
0
ファイル: UILayer.cpp プロジェクト: hyizsg/mytest1st
void HUILayer::dismissAllRootLayers() {
    stopMaskAnimation();
    m_pCurrentLayer = NULL;
    m_pPreEndingLayer = NULL;
    m_pQueneRootLayers->removeAllObjects();
    
    int count = getChildrenCount();
    CCArray *children = getChildren();
    for (int i = 0; i < count; ++i) {
        HRootLayer *layer = (HRootLayer *)children->objectAtIndex(i);
        layer->onEnterBackground();
    }
    
    removeAllChildrenWithCleanup(true);
    updateAllRootLayers();
    endPresentFadeOut();
    if (this == AppDelegate::getInstance()->getGameManager()->getUILayer()) {
        AppDelegate::getInstance()->getGameManager()->onRootLayerCountChanged(getChildrenCount());
    }
}
コード例 #12
0
bool ASTElement::replaceChild(ASTElement* child, ASTElement* element)
{
  ASTElement** children = getChildrenElements();
  size_t length = getChildrenCount();

  for (size_t i = 0; i < length; i++)
  {
    if (children[i] == child) { children[i] = element; return true; }
  }

  return false;
}
コード例 #13
0
void YogaLayoutableShadowNode::appendChild(SharedYogaLayoutableShadowNode child) {
  ensureUnsealed();

  auto yogaNodeRawPtr = &yogaNode_;
  auto childYogaNodeRawPtr = &child->yogaNode_;
  yogaNodeRawPtr->insertChild(childYogaNodeRawPtr, yogaNodeRawPtr->getChildrenCount());

  if (childYogaNodeRawPtr->getOwner() == nullptr) {
    child->ensureUnsealed();
    childYogaNodeRawPtr->setOwner(yogaNodeRawPtr);
  }
}
コード例 #14
0
ファイル: Number.cpp プロジェクト: mercury-mql/birdgame
Node* NumberManager::convertNumberToNode(const std::string& serialName, int base, int number)
{
	int totalWidth = 0;
	auto node = Node::create();
	std::string fontNameForZero = serialName + String::createWithFormat("_0%d.png", base)->getCString();
	auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(fontNameForZero);
	if (NULL == spriteFrame)
	{
		return NULL;
	}

	auto spriteForZero = Sprite::createWithSpriteFrame(spriteFrame);
	auto size = spriteForZero->getContentSize();
	int numberWidth = size.width;
	int numberHeight = size.height;

	if (0 == number)
	{		
		node->addChild(spriteForZero);
		spriteForZero->setAnchorPoint(Point::ZERO);
		spriteForZero->setPosition(Point::ZERO);
		node->setContentSize(size);
	}
	else
	{
		int temp = 0;
		while(number > 0)
		{
			temp = number % 10;
			number = number/10;

			std::string tempNumberName = serialName + String::createWithFormat("_0%d.png", temp + base)->getCString();
			auto sprite = Sprite::createWithSpriteFrameName(tempNumberName);
			sprite->setAnchorPoint(Point::ZERO);
			node->addChild(sprite);
			totalWidth += numberWidth;
		}

		auto children = node->getChildren();
		auto childrenCount = node->getChildrenCount();
		bool isOddCount = childrenCount % 2;
		auto halfCount = childrenCount/2;
		auto xdelta = isOddCount ? (-halfCount*numberWidth - numberWidth/2) : (-halfCount*numberWidth);
		for (int i = childrenCount-1, j=0; i>=0; i--, j++)
		{
			auto sprite = children.at(i);
			sprite->setPosition(Point(xdelta + j*numberWidth, 0));
		}
		node->setContentSize(Size(totalWidth, numberHeight));		
	}
	return node;
}
コード例 #15
0
ファイル: UILayer.cpp プロジェクト: hyizsg/mytest1st
void HUILayer::backupAllRootLayers() {
    m_pBackupRootLayer->removeAllObjects();
    int count = getChildrenCount();
    CCArray *children = getChildren();
    for (int i = 0; i < count; ++i) {
        HRootLayer *layer = (HRootLayer *)children->objectAtIndex(i);
        layer->onShowEditbox(false);
        m_pBackupRootLayer->addObject(layer);
        layer->onEnterBackground();
    }
    removeAllChildrenWithCleanup(false);
    updateAllRootLayers();
}
コード例 #16
0
ファイル: UILayer.cpp プロジェクト: hyizsg/mytest1st
bool HUILayer::onBackPressed() {
    int count = getChildrenCount();
    if (count < 1) return false;
    HRootLayer *layer = (HRootLayer *)getChildren()->objectAtIndex(count - 1);
    if (count == 1) {
        if ((AppDelegate::getInstance()->getGameScene()->getGameDecorationLayer()->getChildrenCount() < 1) &&
            (AppDelegate::getInstance()->getGameScene()->getGameShowLayer()->getChildrenCount() < 1)) {
            return false;
        }
    }
    if (layer->getClass() == "HLoginMainWindow") return false;
    dismissRootLayer(layer);
    return true;
}
コード例 #17
0
void RogueScene::logMessage(const char * pszFormat, ...)
{
    char szBuf[kMaxLogLen+1] = {0};
    va_list ap;
    va_start(ap, pszFormat);
    vsnprintf(szBuf, kMaxLogLen, pszFormat, ap);
    va_end(ap);
    
    CCLOG("logMessage: %s", szBuf);
    
    auto pGameLogNode = getChildByTag(RogueScene::kGameLogTag);
    // とりあえず子要素がないなら無理
    if (!pGameLogNode || pGameLogNode->getChildrenCount() <= 0)
    {
        return;
    }
    
    auto pGameLogText = static_cast<LabelTTF*>(pGameLogNode->getChildren().at(0)); // TODO: 1子しかaddしてないから動く。ちゃんとしないと・・・
    if (pGameLogText)
    {
        // TODO: 別クラスにしてログをlistで保持する。デフォルトの表示は1件だけで、center寄せ表示でいいかと
        auto pMessage = String::create(szBuf);
        
        pMessage->append("\n");

        std::string nowString = pGameLogText->getString();
        
        int count = f_r(nowString, '\n');
        
        // 3行まで表示
        if (count >= 3)
        {
            int size = nowString.size();
            unsigned int loc = nowString.find_last_of('\n', size);
            CCLOG("logMessage: loc = %d size = %d", loc, size);
            if (loc != std::string::npos)
            {
                nowString.erase(loc, nowString.size() - loc);
            }
        }
        pMessage->append(nowString);
        pGameLogText->setString(pMessage->getCString());
        pGameLogText->setVerticalAlignment(cocos2d::TextVAlignment::TOP);
        pGameLogText->setHorizontalAlignment(cocos2d::TextHAlignment::LEFT);
        pGameLogText->setPosition(Point(pGameLogText->getFontSize() / 4 + pGameLogText->getContentSize().width / 2, pGameLogNode->getContentSize().height - pGameLogText->getContentSize().height / 2 - pGameLogText->getFontSize() / 4));
    }
}
コード例 #18
0
ファイル: UILayer.cpp プロジェクト: hyizsg/mytest1st
void HUILayer::updateAllRootLayers() {
    if (this == AppDelegate::getInstance()->getGameScene()->getGameDecorationLayer()) return;
    
    HCommonLayer *gameShowLayer = AppDelegate::getInstance()->getGameScene()->getGameShowLayer();
    HCommonLayer *gameDecorationLayer = AppDelegate::getInstance()->getGameScene()->getGameDecorationLayer();
    bool gameShow = false;
    
    int childrenCount = getChildrenCount();
    if (childrenCount > 0) {
        int fullScreenLayerCount = 0;
        int i = childrenCount - 1;
        for (; i >= 0; --i) {
            HRootLayer *layer = (HRootLayer *)getChildren()->objectAtIndex(i);
            if (fullScreenLayerCount < 1) {
                layer->setOutOfScreen(false);
            } else {
                layer->setOutOfScreen(true);
            }
            if (layer->getIsFullScreen()) {
                ++fullScreenLayerCount;
            }
            if (fullScreenLayerCount > 1) break;
        }
        if (fullScreenLayerCount > 0) {
            gameShow = false;
        } else {
            gameShow = true;
        }
        for (; i >= 0; --i) {
            HRootLayer *layer = (HRootLayer *)getChildren()->objectAtIndex(i);
            layer->setOutOfScreen(true);
        }
    } else {
        gameShow = true;
    }
    
    gameShowLayer->setOutOfScreen(!gameShow);
    gameDecorationLayer->setOutOfScreen(!gameShow);
    if (childrenCount < 1) {
        gameShowLayer->onEnter();
        gameDecorationLayer->onEnter();
    } else {
        gameShowLayer->onExit();
        gameDecorationLayer->onExit();
    }
}
コード例 #19
0
bool RogueScene::tileSetEnemyActorMapItem(ActorSprite::ActorDto enemyActorDto, MapIndex mapIndex)
{
    // すでにプレイヤーが置いてある場合は置けない
    if (m_mapManager.getActorMapItem(&mapIndex)->mapDataType != MapDataType::NONE)
    {
        return false;
    }
    auto pTileMapLayer = getChildByTag(RogueScene::kTiledMapTag);
    auto pEnemyLayer = pTileMapLayer->getChildByTag(RogueScene::kTiledMapEnemyBaseTag);
    // TODO: 倒したときのことも考えないといけない 出現数のカウントでOK?
    long enemyCount = pEnemyLayer->getChildrenCount();
    
    ActorMapItem enemyMapItem;
    enemyMapItem.mapDataType = MapDataType::ENEMY;
    enemyMapItem.mapIndex = mapIndex;
    enemyMapItem.seqNo = enemyCount;
    enemyMapItem.moveDist = enemyActorDto.movePoint;
    enemyMapItem.attackDist = enemyActorDto.attackRange;
    enemyMapItem.moveDone = false;
    enemyMapItem.attackDone = false;
    
    auto enemySprite = ActorSprite::createWithActorDto(enemyActorDto);
    enemySprite->setPosition(indexToPoint(enemyMapItem.mapIndex));
    enemySprite->setActorMapItem(enemyMapItem);
    enemySprite->runBottomAction();
    pEnemyLayer->addChild(enemySprite, RogueScene::zTiledMapEnemyBaseIndex, (RogueScene::kTiledMapEnemyBaseTag + enemyMapItem.seqNo));
    
    // マップに追加
    m_mapManager.addActor(enemySprite->getActorMapItem());
    
    // ミニマップも更新
    auto pMiniMapLayer = getChildByTag(kMiniMapTag);
    
    // 敵の位置表示用(同じく1/8サイズ)TODO: 数が多くなるならBatchNodeとかにしないと?
    auto miniMapEnemyLayer = LayerColor::create(Color4B::RED);
    // タイルの1/8サイズ
    miniMapEnemyLayer->setContentSize(m_baseTileSize / 8);
    // 現在位置からPositionを取得して1/8にする
    miniMapEnemyLayer->setPosition(indexToPointNotTileSize(enemySprite->getActorMapItem()->mapIndex) / 8);
    // 移動時に更新できるようにplayerIdをtag管理
    miniMapEnemyLayer->setTag(enemySprite->getTag());
    // add
    pMiniMapLayer->addChild(miniMapEnemyLayer);
    
    return true;
}
コード例 #20
0
bool SortByScoreOptimizationOperator::validateChildren(){
	for(unsigned i = 0 ; i < getChildrenCount() ; i++){
		PhysicalPlanOptimizationNode * child = getChildAt(i);
		PhysicalPlanNodeType childType = child->getType();
		switch (childType) {
			case PhysicalPlanNode_RandomAccessTerm:
			case PhysicalPlanNode_RandomAccessAnd:
			case PhysicalPlanNode_RandomAccessOr:
			case PhysicalPlanNode_RandomAccessNot:
			case PhysicalPlanNode_RandomAccessGeo:
				return false;
			default:{
				continue;
			}
		}
	}
	return true;
}
コード例 #21
0
bool RandomAccessVerificationAndOptimizationOperator::validateChildren(){
	// all it's children must be RandomAccessNodes
	for(unsigned i = 0 ; i < getChildrenCount() ; i++){
		PhysicalPlanOptimizationNode * child = getChildAt(i);
		PhysicalPlanNodeType childType = child->getType();
		switch (childType) {
			case PhysicalPlanNode_RandomAccessTerm:
			case PhysicalPlanNode_RandomAccessAnd:
			case PhysicalPlanNode_RandomAccessOr:
			case PhysicalPlanNode_RandomAccessNot:
			case PhysicalPlanNode_RandomAccessGeo:
				continue;
			default:
				return false;
		}
	}
	return true;
}
コード例 #22
0
void MySnake::changeRandomSpritePozition()
{
    Array *totalArray = Array::createWithCapacity(col_num * row_num);
    for (int i=0; i<totalArray->capacity(); i++) {
        totalArray->addObject(Integer::create(i));
    }
    
    for (int i=0; i < getChildrenCount()-1; i++) {
        MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag);
        
        totalArray->removeObjectAtIndex(sprite->getIndex());
    }
    
    int randIndex = (CCRANDOM_0_1()+1) * totalArray->count();
    randIndex = CCRANDOM_0_1() * totalArray->count();
    Integer* pozitionIndex = (Integer *)totalArray->getObjectAtIndex(randIndex);
 
    randomSprite->setIndex(pozitionIndex->getValue());
}
コード例 #23
0
bool UnionSortedByIDOptimizationOperator::validateChildren(){
	for(unsigned i = 0 ; i < getChildrenCount() ; i++){
		PhysicalPlanOptimizationNode * child = getChildAt(i);
		PhysicalPlanNodeType childType = child->getType();
		switch (childType) {
			case PhysicalPlanNode_RandomAccessTerm:
			case PhysicalPlanNode_RandomAccessAnd:
			case PhysicalPlanNode_RandomAccessOr:
			case PhysicalPlanNode_RandomAccessNot:
			case PhysicalPlanNode_RandomAccessGeo:
			case PhysicalPlanNode_UnionLowestLevelTermVirtualList:
			case PhysicalPlanNode_GeoNearestNeighbor:
				// this operator cannot have TVL as a child, TVL overhead is not needed for this operator
				return false;
			default:{
				continue;
			}
		}
	}
	return true;
}
コード例 #24
0
ファイル: Number.cpp プロジェクト: chanboo1985/FlappyBird
Node* Number::convert(const char *name, int number, Gravity gravity /* = Gravity::GRAVITY_CENTER */)
{
	auto numbers = numberContainer.at(name);
	if (number == 0)
	{
		auto numberZero = Sprite::createWithSpriteFrame(numbers->at(0));
		numberZero->setAnchorPoint(Point(0.5,0));
		return numberZero;
	}
	auto numberNode = Node::create();
	float totalWidth = 0;
	while (number)
	{
		int temp = number % NUMBER_MAX;
		number /= NUMBER_MAX;
		auto sprite = Sprite::createWithSpriteFrame(numbers->at(temp));
		totalWidth += sprite->getContentSize().width;
		numberNode->addChild(sprite);
	}
	int index;
	float numberWidth,numberHeight,offsetWidth;
	numberHeight = Sprite::createWithSpriteFrame(numbers->at(0))->getContentSize().height;
	numberNode->setContentSize(Size(totalWidth, numberHeight));

	numberWidth = totalWidth / numberNode->getChildrenCount();

	switch (gravity)
	{
	case Gravity::GRAVITY_LEFT:
		index = 0;
		for (auto child : numberNode->getChildren())
		{
			child->setAnchorPoint(Point(0,0));
			offsetWidth = numberWidth*index++;
			child->setPositionX(offsetWidth);
		}
		break;
	case Gravity::GRAVITY_CENTER:
		index = numberNode->getChildrenCount()/2;
		for (auto child : numberNode->getChildren())
		{
			child->setAnchorPoint(Point(0.5,0));
			offsetWidth = numberWidth*index--;
			child->setPositionX(offsetWidth);
		}
		break;
	case Gravity::GRAVITY_RIGHT:
		index = numberNode->getChildrenCount();
		for (auto child : numberNode->getChildren())
		{
			child->setAnchorPoint(Point(1,0));
			offsetWidth = numberWidth*index--;
			child->setPositionX(offsetWidth);
		}
		break;
	default:
		index = numberNode->getChildrenCount()/2;
		for (auto child : numberNode->getChildren())
		{
			child->setAnchorPoint(Point(0.5,0));
			offsetWidth = numberWidth*index--;
			child->setPositionX(offsetWidth);
		}
		break;
	}
	
	return numberNode;
}
コード例 #25
0
bool LLConversationItemSession::hasChildren() const
{
	return getChildrenCount() > 0;
}
コード例 #26
0
void GameScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event){
    
    pointList.clear();

    
    Point location = touch->getLocation();
    cur_point = location;
    if((pre_point - cur_point).getLengthSq()>25){
        seg.p1=pre_point;
        seg.p2=cur_point;
        segment.push_back(seg);
        pre_point=cur_point;
    }
    if (p_2dPath.size() < 1){
        return ;
    }
    RecognitionResult result = g_rGemertricRecognizer->recognize(p_2dPath);
    p_2dPath.clear();
    if (result.score<0.70) {
        return;
    }
    size_t len = curWave.size();
    ValueVector temp_vec;
    log(" 剩余数量 :%zd ",curWave.size());
    for (int i =0; i < len; i ++) {
        auto em = curWave.at(i);         // 获取enmey数组  主要目的是获取signarr
        auto emy = curEnWave.at(i);      // 获取sprite
        auto sign = em->getSignArr().back();  // 获取signarr中最上层的一个
        
        //判断最上层标志是否与手势相符
        log("界面图片%d:用户手势%d",sign->getSignType(),this->resultTypeByName(Value(result.name)));
        if (sign->getSignType()==this->resultTypeByName(Value(result.name))) {
            log(" em->getSignArr().capacity()-BEFORE:%zd getSignArrBEFORE:%zd ",emy->getChildrenCount(),em->getSignArr().size());
            emy->removeChildByTag(sign->getTag());
            Vector<Sign*> arr = em->getSignArr();
            arr.eraseObject(sign);
            em->setSignArr(arr);
            arr.clear();
            log(" em->getSignArr().capacity():%zd getSignArr:%zd",emy->getChildrenCount(),em->getSignArr().size());
            if (emy->getChildrenCount() == 0) {               // 移除之后判断有无子精灵
//                em->removeFromParent();      // 没有则销毁该精灵
//                emy->removeFromParent();
//                curWave.eraseObject(em);
//                curEnWave.eraseObject(emy);
                temp_vec.push_back(Value(i));

            }else{
                emy->stopActionByTag(DropActionTag);
                GameScene::startDrop(10.f, emy,true);
            }
        }
        
    }
    //
    size_t curLen = len;
    for(Value val:temp_vec){
        int curIndex = val.asInt();
        this->curWave.at(curIndex)->removeFromParent();
        this->curEnWave.at(curIndex)->removeFromParent();
        this->curWave.erase(curIndex);
        this->curEnWave.erase(curIndex);
        curLen--;
        if (curLen == 0) {
            waveCount++;
            this->curWave.clear();
            this->curEnWave.clear();
            if (waveCount>=1&&waveCount<=3) {
                lvl = 1;
            }else if(waveCount>=4&&waveCount<=8){
                lvl = 2;
            }else if (waveCount>=9&&waveCount<=14){
                lvl = 3;
            }else if (waveCount>14){
                lvl = 4;
            }
            GameScene::addNewEnemyByLevel(lvl);
        }
    }
    temp_vec.clear();
}
コード例 #27
0
ファイル: UILayer.cpp プロジェクト: hyizsg/mytest1st
void HUILayer::presentRootLayer(HRootLayer *layer, bool inQueue) {
    if (inQueue && (getChildrenCount() > 0)) {
        m_pQueneRootLayers->addObject(layer);
    } else {
        if (!layer->getDisableAnimInOut()) stopMaskAnimation();
        
        CCDirector::sharedDirector()->getTouchDispatcher()->setDispatchEvents(false);
        m_pCurrentLayer = layer;
        stopAIV();
        if (getChildrenCount() > 0) {
            HRootLayer *rootLayer = dynamic_cast<HRootLayer *>(getChildren()->objectAtIndex(getChildrenCount() - 1));
            if (rootLayer) {
                rootLayer->onShowEditbox(false);
                rootLayer->onEnterBackground();
            }
        }
        int zOrder = !layer->getIsFullScreen() ? 1000 : 0;
        int iLayerBasePriority = ((this == AppDelegate::getInstance()->getGameScene()->getUILayer()) ? 20 : 10) * -HTOUCHPRIORITY_LAYERSPACE;
        for (int i = getChildrenCount() - 1; i >= 0; --i) {
            HRootLayer *prelayer = (HRootLayer *)getChildren()->objectAtIndex(i);
            if ((prelayer->getIsFullScreen() && layer->getIsFullScreen()) || (!prelayer->getIsFullScreen() && !layer->getIsFullScreen())) {
                iLayerBasePriority = prelayer->getBaseTouchPriority() - HTOUCHPRIORITY_LAYERSPACE;
                zOrder = prelayer->getZOrder() + 1;
                break;
            }
        }
        zOrder = 0;
        iLayerBasePriority = 0;
        addChild(layer, zOrder);
        if (this == AppDelegate::getInstance()->getGameScene()->getUILayer()) {
            if (!layer->getIsFullScreen()) {
                layer->setBaseTouchPriority(iLayerBasePriority);
//                layer->setTouchEnabled(false);
            }
            layer->setTouchEnabled(true);
        } else {
            layer->setBaseTouchPriority(iLayerBasePriority);
            layer->setTouchEnabled(false);
        }
        layer->onEnterForeground();
        if (this == AppDelegate::getInstance()->getGameManager()->getUILayer()) {
            AppDelegate::getInstance()->getGameManager()->onRootLayerCountChanged(getChildrenCount());
        }
        if (!layer->getDisableAnimInOut()) {
            if (layer->getActionIn()) {
                layer->animIn(NULL);
            } else {
                m_spMasklayer->setVisible(true);
                m_spMasklayer->setPresentUI(true);
                layer->setVisible(false);
                CCFadeIn *fadeIn = CCFadeIn::create(gfDurationFadeIn);
                CCCallFunc *cfIn = CCCallFunc::create(this, callfunc_selector(HUILayer::endPresentFadeIn));
                CCFadeOut *fadeOut = CCFadeOut::create(gfDurationFadeOut);
                CCCallFunc *cfOut = CCCallFunc::create(this, callfunc_selector(HUILayer::endPresentFadeOut));
                m_spMasklayer->runAction(CCSequence::create(fadeIn, cfIn, fadeOut, cfOut, NULL));
            }
        } else {
            updateAllRootLayers();
            CCDirector::sharedDirector()->getTouchDispatcher()->setDispatchEvents(true);
            layer->didMoveToWindow(layer->getParent());
            layer->onEnterTransitionDidFinish();
        }
        layer->onShowEditbox(true);
    }
}
コード例 #28
0
ファイル: Family.cpp プロジェクト: Drygma/FamilyTree
void Family::AddChild(Person *child)
{
	Person **new_members = new Person*[size + 1];
	for (int i = 0; i < size; i++) new_members[i] = members[i];
	new_members[size] = child;

	delete[] members;

	members = new_members;
	size++;

	Relation *new_relations = new Relation[relation_count + 2];
	for (int i = 0; i < relation_count; i++) new_relations[i] = relations[i];
	switch ((*members[size - 1]).gender)
	{
		case MALE:
			new_relations[relation_count] = Relation(members[0], members[size - 1], FATHER_SON);
			new_relations[relation_count + 1] = Relation(members[1], members[size - 1], MOTHER_SON);
			break;
		case FEMALE:
			new_relations[relation_count] = Relation(members[0], members[size - 1], FATHER_DAUGHTER);
			new_relations[relation_count + 1] = Relation(members[1], members[size - 1], MOTHER_DAUGHTER);
			break;
		default:
			break;
	}

	delete[] relations;

	relations = new_relations;
	new_relations = 0;
	relation_count += 2;

	//Если дети до этого уже были, то нужно добавить дополнительные Relations между ними и новым ребенком
	if (int childrenCount = getChildrenCount() - 1)
	{
		new_relations = new Relation[relation_count + childrenCount];
		for (int i = 0; i < relation_count; i++) new_relations[i] = relations[i];
		for (int i = 2; i < size - 1; i++)
		{
			switch ((*members[size - 1]).gender)
			{
				case MALE:
					new_relations[relation_count + (i - 1 - childrenCount)] = Relation(members[size - 1], members[i], (*members[i]).gender ? BROTHER_SISTER : BROTHER_BROTHER);
					break;
				case FEMALE:
					new_relations[relation_count + (i - 1 - childrenCount)] = Relation(members[size - 1], members[i], (*members[i]).gender ? SISTER_SISTER : BROTHER_SISTER);
					break;
				default:
					break;
			}
		}

		delete[] relations;

		relations = new_relations;
		relation_count += childrenCount;
		childrenCount++;
	}

}
コード例 #29
0
ファイル: abengine.c プロジェクト: mohanyang/06acmgobang
ReturnValue alphaBeta(Configuration v, int alpha, int beta, int depth){
// 	int counter=0;
	if (DEBUG_STACK){
		printstack();
		printf("alphabeta a=%d b=%d d=%d\n", alpha, beta, depth);
// 		printBoardNonBlock(v);
	}
	++stackcount;
	HashRetVal s;
	s=retrieve(v);
	ReturnValue ret;
	ReturnValue temp;
	ret.alpha=alpha;
	ret.beta=beta;
	if (s!=NULL) {
		switch (s->type){
			case EXACT:
				if (s->lowerbound>=beta) {
					ret.value=s->lowerbound;
					ret.move=s->mv;
					--stackcount;
					if (DEBUG_STACK){
						printstack();
						printf("hit exact 1\n");
					}
					return ret;
				}
				if (s->upperbound<=alpha) {
					ret.value=s->upperbound;
					ret.move=s->mv;
					--stackcount;
					if (DEBUG_STACK){
						printstack();
						printf("hit exact 2\n");
					}
					return ret;
				}
				ret.alpha=max(alpha, s->lowerbound);
				ret.beta=min(beta, s->upperbound);
				ret.move=s->mv;
				break;
			case FAIL_LOW:
				if (s->upperbound<=alpha) {
					ret.value=s->upperbound;
					ret.move=s->mv;
					--stackcount;
					if (DEBUG_STACK){
						printstack();
						printf("hit fail low\n");
					}
					return ret;
				}
				break;
			case FAIL_HIGH:
				if (s->lowerbound>=beta) {
					ret.value=s->lowerbound;
					ret.move=s->mv;
					--stackcount;
					if (DEBUG_STACK){
						printstack();
						printf("hit fail high\n");
					}
					return ret;
				}
				break;
			default:
				break;
		}
		free(s);
	}
	if (depth==0) {
		ChildIterator itr=getExpansion(v);
		ret.value=getCurrentValue(itr);
		ret.move=getCurrent(itr);
		releaseChildIterator(itr);
		if (getType(v)==MAXNODE)
			updateMoveHeuristic(v, ret.move.x, ret.move.y, ret.value);
		else
			updateMoveHeuristic(v, ret.move.x, ret.move.y, -ret.value);
		if (DEBUG_STACK){
			printBoardNonBlock(v);
			printstack();
			printf("eval %d\n", ret.value);
			printstack();
			printf("(%d, %d)\n", ret.move.x, ret.move.y);
		}
	}
	else if (getType(v)==MAXNODE) {
//		printf("*\n");
		ChildIterator itr=getExpansion(v);
//		printf("e: %d %d %d\n", getCurrent(itr).x, getCurrent(itr).y, depth);
		int a=alpha;
		ret.value=-FIVE_SCORE;
		ret.move=getCurrent(itr);
		if (getCurrentValue(itr)>=FIVE_SCORE){
			ret.value=FIVE_SCORE;
		}
		else {
			while (itr!=NULL && ret.value<beta) {
	//			printf("depth=%d, move=%d %d\n",
	//				depth, getCurrent(itr).x, 
	//				getCurrent(itr).y);
				if (tickTimer()==0)
					break;
				applyMove(v, getCurrent(itr));
	//			printBoardNonBlock(v);
				
				if (DEBUG_STACK){
					printstack();
					printf("black trying %d %d\n", 
						getCurrent(itr).x, getCurrent(itr).y);
				}
				
				switch (getChildrenCount(itr)){
// 					case 1:
/*						++quadcount;
						temp=alphaBeta(v, a, beta, 
								depth-((doublecount & 3)==0));*/
					case 1:
// 					case 2:
						++doublecount;
						temp=alphaBeta(v, a, beta,
								depth-1);
						--doublecount;
						break;
					default:
						temp=alphaBeta(v, a, beta, depth-1);
						break;
				}
				updateMoveHeuristic(v, temp.move.x,
									temp.move.y, temp.value);
				if (DEBUG_STACK){
					printstack();
					printf("black try %d %d, result=%d\n", 
						getCurrent(itr).x, getCurrent(itr).y,
									temp.value);
				}
				
				if (temp.value>ret.value) {
					ret.value=temp.value;
					ret.move=getCurrent(itr);
	//				printf("current black move = %d %d\n", ret.move.x, ret.move.y);
				}
				undoMove(v, getCurrent(itr));
	//			printBoard(v);
				if (a<ret.value){
					a=ret.value;
				}
	//			printf("a=%d ret.value=%d\n", a, ret.value);
				// TODO to be verified
	/*			if (temp.value<=-INFINITY){
					++counter;
				}
				if (counter>2)
					break;*/
				getNext(&itr);
	//			printf("e: %d %d\n", itr->current.x, itr->current.y);
			}
			if (DEBUG_STACK){
				if (ret.value>=beta){
					printstack();
					printf("pruned\n");
				}
			}
		}
		releaseChildIterator(itr);
	}
	else {
//		printf("-\n");
		ChildIterator itr=getExpansion(v);
//		printf("n: %d %d %d\n", getCurrent(itr).x, getCurrent(itr).y, depth);
		int b=beta;
		ret.value=FIVE_SCORE;
		ret.move=getCurrent(itr);
		if (getCurrentValue(itr)<=-FIVE_SCORE){
			ret.value=-FIVE_SCORE;
		}
		else {
			while (itr!=NULL && ret.value>alpha) {
				if (tickTimer()==0)
					break;
				applyMove(v, getCurrent(itr));
				
				if (DEBUG_STACK){
					printstack();
					printf("white trying %d %d\n", 
						getCurrent(itr).x, getCurrent(itr).y);
				}
				
				if (getChildrenCount(itr)<=1){
					++doublecount;
					temp=alphaBeta(v, alpha, b, 
							depth-1);
					--doublecount;
				}
				else {
					temp=alphaBeta(v, alpha, b, depth-1);
				}
				updateMoveHeuristic(v, temp.move.x,
									temp.move.y, -temp.value);
				
				if (DEBUG_STACK){
					printstack();
					printf("white try %d %d, result=%d\n", 
						getCurrent(itr).x, getCurrent(itr).y,
									temp.value);
					printf("retval=%d\n", ret.value);
				}
				
				if (temp.value<ret.value){
					ret.value=temp.value;
					ret.move=getCurrent(itr);
		//			printf("current white move = %d %d\n", ret.move.x, ret.move.y);
				}
				undoMove(v, getCurrent(itr));
				if (b>ret.value){
					b=ret.value;
				}
	//			printf("a=%d ret.value=%d\n", b, ret.value);
/*				if (ret.value<=-INFINITY-10)
					break;*/
				// TODO to be verified
	/*			if (temp.value>=INFINITY){
					++counter;
				}
				if (counter>2)
					break;*/
				getNext(&itr);
			}
			if (DEBUG_STACK){
				if (ret.value<=alpha){
					printstack();
					printf("pruned\n");
				}
			}
		}
		releaseChildIterator(itr);
	}

	if (ret.value<=alpha && getType(v)==MINNODE) {
		/* fail low */
		v->upperbound=ret.value;
		
		if (depth>0)
			store(v, ret.move, FAIL_LOW);
		
		/* Fail low result implies an upper bound */
	}
	else if (ret.value>alpha && ret.value<beta) {
		/* accurate window */
		v->upperbound=v->lowerbound=ret.value;
		if (depth>0)
			store(v, ret.move, EXACT);
	}
	else if (getType(v)==MINNODE && ret.value>=MAXNODE){
		/* fail high */
		v->lowerbound=ret.value;
		
		if (depth>0)
			store(v, ret.move, FAIL_HIGH);
		
	}
/*	printstack();
	printf("ab return %d (%d,%d))\n", ret.value, ret.move.x,
		  ret.move.y);*/
//	getchar();
	--stackcount;
	return ret;
}
コード例 #30
0
ファイル: XML.cpp プロジェクト: pcontezini/pieroshell
Handle<Value> XML::GetChildrenCount(const Arguments& args) {
	HandleScope scope;
	Handle<Integer> count = Integer::New(getChildrenCount());
	return(scope.Close(count));
}