给单机游戏添加准备好的弹幕。直接上代码,作为一个记录:
在GameLayer.h中声明控件和方法:
public:
virtual void update(float dt);//更新
void addDanmu(float dt);//添加弹幕
private:
Node * panel_danmu;//弹幕
float danmuRefushDelay;//弹幕时间
在GameLayer.cpp中实现:
在init()中
//设置初始值
danmuRefushDelay = 0;
//获取弹幕字样的控件
panel_danmu = node->getChildByName("panel_danmu");
//启动update()
this->scheduleUpdate();
//在update()中调用添加弹幕方法 实时刷新准备好的弹幕
void GameLayer::update(float dt)
{
addDanmu(dt);
}
//添加弹幕
void GameLayer::addDanmu(float dt)
{
danmuRefushDelay += dt;
//每1.2秒截取一条弹幕
if (danmuRefushDelay > 1.2)
{
danmuRefushDelay = 0;
//auto danmu = Sprite::createWithTexture(GET_PLAYER_NAME("scroll_str.png"), Rect(0, (int)(CCRANDOM_0_1() * 50) * 20, 308, 20));
//从scroll_str.png中获取弹幕字样,并设置弹幕的坐标x,y和宽高
//CCRANDOM_0_1() 生成“随机数”的范围是
0 <= (float)x < 1
auto danmu = Sprite::create("scroll_str.png", Rect(0, (int)(CCRANDOM_0_1() * 50) * 20, 308, 20));
danmu->setPosition(Point(1200, 450 + (CCRANDOM_0_1() * 100)));
//设置弹幕的动画,从左到右,移出界面
danmu->runAction(Sequence::create(MoveBy::create(10, Point(-1500, 0)), CallFunc::create([danmu]{
danmu->removeFromParentAndCleanup(true);
}), NULL));
//在弹幕模块的位置添加弹幕字样
panel_danmu->addChild(danmu);
}
注意:准备一张带有写好的弹幕字样的图片,就是上面用到scroll_str.png。图片就是下面这张,因为是透明背景,白色的字,应该是一片白的,复制图片到桌面打开就能看到了。