cocos2dx 植物大战僵尸 8 植物类和向日葵的小更新

这次实现容器类的植物,即睡莲和花盆

不过在写之前,需要重写下以前的Plant代码。

/*植物类型*/
enum class PlantType
{
	Common,//普通类植物
	Vessel,//容器类植物
};
这个是植物类型,目前仅仅有一般性植物和容器类植物,以后也可能会再添加

然后在Plant添加属性m_plantType,表示当前的植物类型,和m_pVesselPlant,这个是为了跟随睡莲运动添加的属性

	virtual void update(float dt);
	//每次更新都会调用的钩子函数
	virtual void updateHook(float dt) = 0;

	void setVesselPlant(Plant*plant);
接着就是update的实现有所改变了

void Plant::update(float dt)
{
	updateHook(dt);
	//跟随容器植物运动
	if (m_pVesselPlant)
	{
		auto pos = m_pVesselPlant->getPosition();
		auto size = m_pVesselPlant->getContentSize();

		this->setPosition(pos + Point(0,-size.height/2));
	}
}

看上面的代码,是所有植物通用的方法,如果植物有特定的需求的话,调用updateHook()即可

然后需要改变向日葵和双生向日葵的代码

void SunFlower::updateHook(float dt)
{
	//负责绘图的更新
	//当前处于正常状态
	if (m_curState == State::Normal)
	{
		m_elapsed += dt;
		//切换状态
		if (m_elapsed >= this->getColdDownTime() - m_produceSunDuration)
		{
			m_curState = State::ProducingSun;
			//改变内部精灵位置
			auto pos = m_pSprite->getPosition();
			auto size = this->getContentSize();

			m_pSprite->setPosition(pos - Point(0.f,size.height));
		}
	}
	else if (m_curState == State::ProducingSun)
	{
		m_elapsed += dt;
		//恢复正常状态
		if (m_elapsed >= this->getColdDownTime())
		{
			m_elapsed = 0.f;

			m_curState = State::Normal;
			//改变内部精灵位置
			auto pos = m_pSprite->getPosition();
			auto size = this->getContentSize();

			m_pSprite->setPosition(pos + Point(0.f,size.height));
			//生产阳光这个是虚函数
			this->productSun();
		}
	}
}

在向日葵和双生向日葵中的updateHook中,用于绘图的更新和技能的释放

void TwinSunflower::productSun()
{
	//调用两次
	for (auto i = 0;i < 2;i++)
	{
		SunFlower::productSun();
	}
}
本节是为了下一节的容器植物作的小小改变。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值