转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8600180
游戏中,各种效果能够使游戏更有趣。这里将记录游戏Demo的音效和streak特效。
streak特效如下:
streak效果有点像彗星的尾巴,用来表示物体移动速度快。streak有strip, spot, blade, line四种类型,本例中使用的使spot,对于wiEngine的结构体为MS_STYLE_SPOT。
定义streak,如下:
m_streak1 = wyMotionStreak::make(0.5, wyTexture2D::makePNG(RES("R.drawable.boyhit2")), wyc4b(155, 155, 0, 150), MS_STYLE_SPOT);
((wySpotRibbon*)m_streak1->getRibbon())->setDistance(DP(15));
addChildLocked(m_streak1, -1);
其实streak没有什么神秘的,完全可以理解为一个layer,包含了一组相同的sprite,根据给定的路径,结合特定算法更新layer中的元素的显示,达到相应的效果。不同的算法对应不同类型的streak,选择完特定 的streak后,只要指定路径就可以了。这个例子中的路径是hero的移动路径。所以只要注册一个函数来记录路径就可以了;代码如下:
timer = wyTimer::make(wyTargetSelector::make(this, SEL(Boy::onAddPoint))); //创建一个timer类来包裹onAddPoint函数,以便注册。
timer->retain();
//scheduleLocked(timer); //一旦注册,就会立即生效; 可以使用unscheduleLocked(timer);来取消注册
......
void Boy::onAddPoint(wyTargetSelector* ts) {
m_streak1->addPoint(sprite->getPositionX(), sprite->getPositionY()); // 记录sprite的移动路径
}
注册事件来响应Jump按钮。运行的序列如下,0)点击Jump,1)把onAndPoint函数注册到游戏中,从而开启streak效果;2)调用jump函数来施用一个impluse给hero,使物体向上运动;3)hero进行jump运动,并且有streak效果。4)hero着地,被box2d侦测到,触发b2ContactListener的BeginContact函数,进而调用Boy::shotEnd函数(在scene类中注册过监听器),进而取消streak效果。
void Boy::jump() { //响应Jump按钮事件
wyCallFunc* sbegin = wyCallFunc::make(wyTargetSelector::make(this, SEL(Boy::shotBegin)));
wyCallFunc* jump = wyCallFunc::make(wyTargetSelector::make(this, SEL(Boy::_jump)));
wySequence* s = wySequence::make(sbegin, jump, NULL);
sprite->runAction(s);
}
void Boy::shotBegin() { //开启streak效果
if (!isRushing) {
scheduleLocked(timer);
isRushing = true;
}
}
void Boy::_jump() { //调用scene的_jump函数
scene->_jump();
}
void MyScene::_jump() { //给hero施加一个向上的impulse,从而使hero离开地面,达到跳跃的效果
hero_body->ApplyLinearImpulse(b2Vec2(0, 50.0f),
hero_body->GetWorldCenter());
}
void MyScene::BeginContact(b2Contact* contact) { //b2ContactListener中的回调函数,将在hero着地的时候被调用。
isfly = false;
hero->changeAction(BOY_RUN);
hero->shotEnd(); //关闭streak效果
}
void Boy::shotEnd() { //关闭streak效果
if(isRushing) {
unscheduleLocked(timer);
isRushing = false;
}
}
接着讨论音效的简单实现:
1)预加载音效文件
wyAudioManager::getInstance()->preloadEffect(RES("R.raw.jump"), FORMAT_OGG);
wyAudioManager::getInstance()->preloadEffect(RES("R.raw.shoot"), FORMAT_OGG);
wyAudioManager::getInstance()->preloadEffect(RES("R.raw.land"), FORMAT_OGG);
wyAudioManager::getInstance()->preloadEffect(RES("R.raw.run"), FORMAT_OGG);
2)封装一个函数
typedef enum {
BOY_RUN = 0, BOY_JUMP, BOY_HIT, BOY_LAND
} BoyActionsTag;
......
void Boy::playEffect(BoyActionsTag tag) {
const char* preEffect = soundEffect;
switch (tag) {
case BOY_JUMP:
soundEffect = "R.raw.jump";
break;
case BOY_HIT:
soundEffect = "R.raw.shoot";
break;
case BOY_LAND:
soundEffect = "R.raw.land";
break;
case BOY_RUN:
soundEffect = "R.raw.run";
break;
}
if (soundEffect != NULL) {
if (preEffect != NULL)
wyAudioManager::getInstance()->stopEffect(RES(preEffect));
wyAudioManager::getInstance()->playEffect(RES(soundEffect),
FORMAT_OGG);
}
}
另外,背景音乐的播发:
wyAudioManager::getInstance()->playBackgroundMusic(RES("R.raw.bg"), FORMAT_WAV, -1);
分享到:
相关推荐
WiEngine 是一个专门为移动游戏开发设计的开源...通过深入研究WiEngine-master的源代码,开发者不仅可以了解WiEngine的工作原理,还能学习到游戏开发的最佳实践,这对于提升个人技能或者团队开发效率都是极其有价值的。
这是一个使用wiEngine手机游戏引擎写的一个非常简单的游戏。游戏只有两个场景,一个是欢迎场景,一个是游戏场景。欢迎场景只有一个背景图,一张游戏logo和一个开始游戏的按钮,点击开始游戏按钮,会进入游戏场景。在...
WiEngineDemos是一款基于微云游戏引擎开发的示例代码集合,主要面向Android平台,旨在帮助开发者更好地理解和应用微云游戏引擎。微云游戏引擎(WiEngine)是一款强大的跨平台游戏开发工具,它允许开发者使用Java语言...
微云游戏引擎WiEngine是一款专为移动设备设计的游戏开发框架,尤其适用于Android和iOS平台。它为开发者提供了高效、易用的工具集,用于构建2D游戏,支持丰富的图形渲染、音频处理、物理模拟等功能。这个...
1. **图形渲染**:基于OpenGL ES,WiEngine提供了高效的2D图形渲染能力,可以轻松创建复杂的场景和游戏画面。开发者可以通过API控制精灵(Sprite)、纹理(Texture)和图层(Layer)来构建游戏世界。 2. **物理引擎...
- 移动的精灵:讲解如何在游戏中控制角色的移动。 - 射击子弹&碰撞检测:教授如何实现简单的物理交互和碰撞效果。 - 音乐音效:指导如何添加声音效果提升游戏体验。 - 打包和发布:最后一步,教你如何将游戏发布...
2. **物理引擎**:基于Box2D,能够模拟真实的物理效果,如碰撞检测、重力等。 3. **系统模块**:包括角色系统、地图系统、任务系统等,支持游戏逻辑的构建。 4. **编辑器工具**:提供了角色分析设计器、地图编辑器等...
微云游戏引擎开发文档001介绍了微云游戏引擎中的动作(Actions)概念及其实现方式,这对于理解如何在游戏中实现动画效果非常重要。本文将详细解析文档中的关键知识点,并进一步探讨其背后的技术细节。 #### 动作...
微云游戏引擎(WiEngine)通过其核心组件`EventDispatcher`进行事件的分发与管理,这一机制确保了引擎内部对用户交互、硬件输入和其他系统级事件的高效响应。所有事件处理器需在`EventDispatcher`上注册,以便接收并...
粒子系统在游戏开发和视觉设计中扮演着至关重要的角色,它能够创建出各种绚丽的动态效果,如火焰、烟雾、水波、光晕等,为游戏世界带来生机与活力。ParticleDesigner是一款专为开发者设计的工具,它使得粒子系统的...
棺材笔记一 大于你妹的20个字符啊