mirror of
https://github.com/wu736139669/OzgGameRPG.git
synced 2026-08-05 06:24:38 +00:00
312 lines
12 KiB
C++
312 lines
12 KiB
C++
//
|
|
// RPGBattlePlayerSprite.cpp
|
|
// OzgGameRPG
|
|
//
|
|
// Created by ozg on 14-4-3.
|
|
//
|
|
//
|
|
|
|
#include "RPGBattlePlayerSprite.h"
|
|
#include "RPGBattleSceneLayer.h"
|
|
#include "OzgCCUtility.h"
|
|
|
|
RPGBattlePlayerSprite::RPGBattlePlayerSprite()
|
|
{
|
|
|
|
}
|
|
|
|
RPGBattlePlayerSprite::~RPGBattlePlayerSprite()
|
|
{
|
|
this->m_spriteFramesNormal->release();
|
|
this->m_spriteFramesHurt->release();
|
|
this->m_spriteFramesDying->release();
|
|
this->m_spriteFramesWin->release();
|
|
this->m_spriteFramesAvoid->release();
|
|
this->m_spriteFramesDeath->release();
|
|
this->m_spriteFramesAttack->release();
|
|
this->m_spriteFramesUseItem->release();
|
|
this->m_spriteFramesSpecialAttack->release();
|
|
this->m_spriteFramesChanting->release();
|
|
|
|
CCLog("RPGBattlePlayerSprite 释放");
|
|
}
|
|
|
|
bool RPGBattlePlayerSprite::initWithPlayerData(RPGPlayer* data)
|
|
{
|
|
CCArray *spriteFrames1 = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_1.png", data->m_texPrefix.c_str())->getCString(), 3, 4);
|
|
CCArray *spriteFrames2 = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_2.png", data->m_texPrefix.c_str())->getCString(), 3, 4);
|
|
CCArray *spriteFrames3 = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_3.png", data->m_texPrefix.c_str())->getCString(), 3, 4);
|
|
|
|
this->m_spriteFramesNormal = new CCArray();
|
|
this->m_spriteFramesNormal->init();
|
|
this->m_spriteFramesNormal->addObject(spriteFrames1->objectAtIndex(0));
|
|
this->m_spriteFramesNormal->addObject(spriteFrames1->objectAtIndex(1));
|
|
this->m_spriteFramesNormal->addObject(spriteFrames1->objectAtIndex(2));
|
|
this->m_spriteFramesNormal->addObject(spriteFrames1->objectAtIndex(1));
|
|
|
|
this->m_spriteFramesHurt = new CCArray();
|
|
this->m_spriteFramesHurt->init();
|
|
this->m_spriteFramesHurt->addObject(spriteFrames1->objectAtIndex(3));
|
|
this->m_spriteFramesHurt->addObject(spriteFrames1->objectAtIndex(4));
|
|
this->m_spriteFramesHurt->addObject(spriteFrames1->objectAtIndex(5));
|
|
|
|
this->m_spriteFramesDying = new CCArray();
|
|
this->m_spriteFramesDying->init();
|
|
this->m_spriteFramesDying->addObject(spriteFrames1->objectAtIndex(6));
|
|
this->m_spriteFramesDying->addObject(spriteFrames1->objectAtIndex(7));
|
|
this->m_spriteFramesDying->addObject(spriteFrames1->objectAtIndex(8));
|
|
this->m_spriteFramesDying->addObject(spriteFrames1->objectAtIndex(7));
|
|
|
|
this->m_spriteFramesWin = new CCArray();
|
|
this->m_spriteFramesWin->init();
|
|
this->m_spriteFramesWin->addObject(spriteFrames2->objectAtIndex(0));
|
|
this->m_spriteFramesWin->addObject(spriteFrames2->objectAtIndex(1));
|
|
this->m_spriteFramesWin->addObject(spriteFrames2->objectAtIndex(2));
|
|
this->m_spriteFramesWin->addObject(spriteFrames2->objectAtIndex(1));
|
|
|
|
this->m_spriteFramesAvoid = new CCArray();
|
|
this->m_spriteFramesAvoid->init();
|
|
this->m_spriteFramesAvoid->addObject(spriteFrames2->objectAtIndex(3));
|
|
this->m_spriteFramesAvoid->addObject(spriteFrames2->objectAtIndex(4));
|
|
this->m_spriteFramesAvoid->addObject(spriteFrames2->objectAtIndex(5));
|
|
|
|
this->m_spriteFramesDeath = new CCArray();
|
|
this->m_spriteFramesDeath->init();
|
|
this->m_spriteFramesDeath->addObject(spriteFrames2->objectAtIndex(9));
|
|
this->m_spriteFramesDeath->addObject(spriteFrames2->objectAtIndex(10));
|
|
this->m_spriteFramesDeath->addObject(spriteFrames2->objectAtIndex(11));
|
|
this->m_spriteFramesDeath->addObject(spriteFrames2->objectAtIndex(10));
|
|
|
|
this->m_spriteFramesAttack = new CCArray();
|
|
this->m_spriteFramesAttack->init();
|
|
this->m_spriteFramesAttack->addObject(spriteFrames3->objectAtIndex(0));
|
|
this->m_spriteFramesAttack->addObject(spriteFrames3->objectAtIndex(1));
|
|
this->m_spriteFramesAttack->addObject(spriteFrames3->objectAtIndex(2));
|
|
|
|
this->m_spriteFramesUseItem = new CCArray();
|
|
this->m_spriteFramesUseItem->init();
|
|
this->m_spriteFramesUseItem->addObject(spriteFrames3->objectAtIndex(3));
|
|
this->m_spriteFramesUseItem->addObject(spriteFrames3->objectAtIndex(4));
|
|
this->m_spriteFramesUseItem->addObject(spriteFrames3->objectAtIndex(5));
|
|
|
|
this->m_spriteFramesSpecialAttack = new CCArray();
|
|
this->m_spriteFramesSpecialAttack->init();
|
|
this->m_spriteFramesSpecialAttack->addObject(spriteFrames3->objectAtIndex(6));
|
|
this->m_spriteFramesSpecialAttack->addObject(spriteFrames3->objectAtIndex(7));
|
|
this->m_spriteFramesSpecialAttack->addObject(spriteFrames3->objectAtIndex(8));
|
|
|
|
this->m_spriteFramesChanting = new CCArray();
|
|
this->m_spriteFramesChanting->init();
|
|
this->m_spriteFramesChanting->addObject(spriteFrames3->objectAtIndex(9));
|
|
this->m_spriteFramesChanting->addObject(spriteFrames3->objectAtIndex(10));
|
|
this->m_spriteFramesChanting->addObject(spriteFrames3->objectAtIndex(11));
|
|
this->m_spriteFramesChanting->addObject(spriteFrames3->objectAtIndex(10));
|
|
|
|
if(CCSprite::initWithSpriteFrame((CCSpriteFrame*)this->m_spriteFramesNormal->objectAtIndex(0)))
|
|
{
|
|
this->m_data = data;
|
|
this->setScale(1.75);
|
|
|
|
this->m_isSelected = false;
|
|
|
|
if(this->m_data->m_HP > 0)
|
|
{
|
|
this->m_data->m_status = kRPGDataStatusNormal;
|
|
this->animNormal();
|
|
}
|
|
else
|
|
{
|
|
this->m_data->m_status = kRPGDataStatusDeath;
|
|
this->animDeath();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
RPGBattlePlayerSprite* RPGBattlePlayerSprite::createWithPlayerData(RPGPlayer* data)
|
|
{
|
|
RPGBattlePlayerSprite *obj = new RPGBattlePlayerSprite();
|
|
if(obj && obj->initWithPlayerData(data))
|
|
{
|
|
obj->autorelease();
|
|
return obj;
|
|
}
|
|
CC_SAFE_DELETE(obj);
|
|
return NULL;
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::selected(bool isSelected)
|
|
{
|
|
this->m_isSelected = isSelected;
|
|
|
|
if(this->m_isSelected)
|
|
{
|
|
CCSprite *handCursor = (CCSprite*)this->getChildByTag(kRPGBattlePlayerSpriteTagCursor);
|
|
if(!handCursor)
|
|
{
|
|
handCursor = CCSprite::createWithSpriteFrameName("gui_hand.png");
|
|
handCursor->setScale(0.15);
|
|
handCursor->setTag(kRPGBattlePlayerSpriteTagCursor);
|
|
handCursor->setFlipX(true);
|
|
handCursor->setPosition(ccp(-12, 10));
|
|
this->addChild(handCursor);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CCSprite *handCursor = (CCSprite*)this->getChildByTag(kRPGBattlePlayerSpriteTagCursor);
|
|
if(handCursor)
|
|
handCursor->removeFromParentAndCleanup(true);
|
|
}
|
|
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::animNormal()
|
|
{
|
|
this->stopAllActions();
|
|
|
|
if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm))
|
|
this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true);
|
|
|
|
//战斗不能
|
|
if(this->m_data->m_HP <= 0)
|
|
this->m_data->m_status = kRPGDataStatusDeath;
|
|
|
|
//临死
|
|
else if(this->m_data->m_HP <= 9)
|
|
this->m_data->m_status = kRPGDataStatusDying;
|
|
|
|
if(this->m_data->m_status == kRPGDataStatusDeath)
|
|
{
|
|
this->animDeath();
|
|
return;
|
|
}
|
|
else if(this->m_data->m_status == kRPGDataStatusDying)
|
|
{
|
|
this->animDying();
|
|
return;
|
|
}
|
|
|
|
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesNormal, 0.2);
|
|
CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation));
|
|
this->runAction(animate);
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::animDying()
|
|
{
|
|
this->stopAllActions();
|
|
|
|
if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm))
|
|
this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true);
|
|
|
|
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesDying, 0.2);
|
|
CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation));
|
|
this->runAction(animate);
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::animDeath()
|
|
{
|
|
this->stopAllActions();
|
|
|
|
if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm))
|
|
this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true);
|
|
|
|
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesDeath, 0.2);
|
|
CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation));
|
|
this->runAction(animate);
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::animWin()
|
|
{
|
|
this->stopAllActions();
|
|
|
|
if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm))
|
|
this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true);
|
|
|
|
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesWin, 0.2);
|
|
CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation));
|
|
this->runAction(animate);
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::animHurt()
|
|
{
|
|
this->stopAllActions();
|
|
|
|
if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm))
|
|
this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true);
|
|
|
|
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesHurt, 0.2);
|
|
CCSequence *animate = CCSequence::create(CCAnimate::create(animation), CCDelayTime::create(1.5), CCCallFunc::create(this, callfunc_selector(RPGBattlePlayerSprite::animNormal)), NULL);
|
|
this->runAction(animate);
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::animAttack(CCObject* target, cocos2d::CCObject *targetObjData)
|
|
{
|
|
this->stopAllActions();
|
|
|
|
SimpleAudioEngine::sharedEngine()->playEffect("audio_battle_attack1.wav");
|
|
|
|
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesAttack, 0.15);
|
|
|
|
//挥动武器的动作
|
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo(CCString::createWithFormat("attack%i.ExportJson", this->m_data->m_dataId)->getCString());
|
|
CCArmature* arm = CCArmature::create(CCString::createWithFormat("attack%i", this->m_data->m_dataId)->getCString());
|
|
arm->getAnimation()->play("main_anim");
|
|
arm->setPosition(CCPointZero);
|
|
arm->setTag(kRPGBattlePlayerSpriteTagArm);
|
|
arm->setScale(0.75);
|
|
this->addChild(arm);
|
|
|
|
//对应好arm位置
|
|
switch (this->m_data->m_dataId)
|
|
{
|
|
case 2:
|
|
arm->setPosition(ccp(arm->getPosition().x - 5, arm->getPosition().y));
|
|
break;
|
|
case 3:
|
|
arm->setPosition(ccp(arm->getPosition().x - 5, arm->getPosition().y));
|
|
break;
|
|
case 4:
|
|
|
|
break;
|
|
default:
|
|
arm->setPosition(ccp(arm->getPosition().x - 6, arm->getPosition().y + 5));
|
|
break;
|
|
}
|
|
|
|
this->runAction(CCSequence::createWithTwoActions(CCAnimate::create(animation), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackResults), (void*)targetObjData)));
|
|
}
|
|
|
|
void RPGBattlePlayerSprite::showEffectResults(cocos2d::CCObject *target, int HPResults, CCNode* srcAttackObj)
|
|
{
|
|
//srcAttackObj为发起攻击的Sprite对象
|
|
|
|
addLab(this, kRPGBattlePlayerSpriteTagEffectResults, CCString::createWithFormat("%i", HPResults), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2));
|
|
|
|
CCLabelTTF *effectResults = (CCLabelTTF*)this->getChildByTag(kRPGBattlePlayerSpriteTagEffectResults);
|
|
|
|
//增加HP的话则使用绿色
|
|
if(HPResults > 0)
|
|
effectResults->setFontFillColor(ccc3(80, 255, 90));
|
|
|
|
CCMoveBy *up = CCMoveBy::create(0.5, ccp(0, 30));
|
|
CCMoveBy *down = CCMoveBy::create(1, ccp(0, -30));
|
|
|
|
this->m_HPResults = HPResults;
|
|
|
|
effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattlePlayerSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetEffectLabEnd), srcAttackObj), NULL));
|
|
|
|
}
|
|
|
|
//private
|
|
void RPGBattlePlayerSprite::showEffectResultsEnd()
|
|
{
|
|
this->m_data->m_HP += this->m_HPResults;
|
|
|
|
if(this->m_data->m_HP < 0)
|
|
this->m_data->m_HP = 0;
|
|
|
|
}
|