`
mmdev
  • 浏览: 13300660 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

基于WiEngine游戏引擎--角色基本效果

 
阅读更多

转发,请保持地址: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-master

    WiEngine 是一个专门为移动游戏开发设计的开源...通过深入研究WiEngine-master的源代码,开发者不仅可以了解WiEngine的工作原理,还能学习到游戏开发的最佳实践,这对于提升个人技能或者团队开发效率都是极其有价值的。

    一个用wiEngine写的非常简单的游戏

    这是一个使用wiEngine手机游戏引擎写的一个非常简单的游戏。游戏只有两个场景,一个是欢迎场景,一个是游戏场景。欢迎场景只有一个背景图,一张游戏logo和一个开始游戏的按钮,点击开始游戏按钮,会进入游戏场景。在...

    WiEngineDemos 微云游戏引擎示例代码

    WiEngineDemos是一款基于微云游戏引擎开发的示例代码集合,主要面向Android平台,旨在帮助开发者更好地理解和应用微云游戏引擎。微云游戏引擎(WiEngine)是一款强大的跨平台游戏开发工具,它允许开发者使用Java语言...

    微云游戏引擎WiEngineDemos_java源代码

    微云游戏引擎WiEngine是一款专为移动设备设计的游戏开发框架,尤其适用于Android和iOS平台。它为开发者提供了高效、易用的工具集,用于构建2D游戏,支持丰富的图形渲染、音频处理、物理模拟等功能。这个...

    WiEngine入门笔记(1)学习源码

    1. **图形渲染**:基于OpenGL ES,WiEngine提供了高效的2D图形渲染能力,可以轻松创建复杂的场景和游戏画面。开发者可以通过API控制精灵(Sprite)、纹理(Texture)和图层(Layer)来构建游戏世界。 2. **物理引擎...

    Cocos2d开发资源大集合

    - 移动的精灵:讲解如何在游戏中控制角色的移动。 - 射击子弹&碰撞检测:教授如何实现简单的物理交互和碰撞效果。 - 音乐音效:指导如何添加声音效果提升游戏体验。 - 打包和发布:最后一步,教你如何将游戏发布...

    Android游戏开发步骤及相关引擎解析

    2. **物理引擎**:基于Box2D,能够模拟真实的物理效果,如碰撞检测、重力等。 3. **系统模块**:包括角色系统、地图系统、任务系统等,支持游戏逻辑的构建。 4. **编辑器工具**:提供了角色分析设计器、地图编辑器等...

    微云游戏引擎开发文档001

    微云游戏引擎开发文档001介绍了微云游戏引擎中的动作(Actions)概念及其实现方式,这对于理解如何在游戏中实现动画效果非常重要。本文将详细解析文档中的关键知识点,并进一步探讨其背后的技术细节。 #### 动作...

    微云游戏引擎文档002

    微云游戏引擎(WiEngine)通过其核心组件`EventDispatcher`进行事件的分发与管理,这一机制确保了引擎内部对用户交互、硬件输入和其他系统级事件的高效响应。所有事件处理器需在`EventDispatcher`上注册,以便接收并...

    ParticleDesigner

    粒子系统在游戏开发和视觉设计中扮演着至关重要的角色,它能够创建出各种绚丽的动态效果,如火焰、烟雾、水波、光晕等,为游戏世界带来生机与活力。ParticleDesigner是一款专为开发者设计的工具,它使得粒子系统的...

    car2源代码

    棺材笔记一 大于你妹的20个字符啊

Global site tag (gtag.js) - Google Analytics