注:这个游戏是根据http://code4app.com/ios/RPG%E5%9B%9E%E5%90%88%E5%88%B6%E6%88%98%E6%96%97%E6%B8%B8%E6%88%8F/527b41e86803fa9d28000002 使用Cocos2d-x 3.0beta重新实现的,而原游戏则使用Cocos2d-iphone
为什么将虚拟操作键放在第一篇呢?原因很简单,就目前而言,几乎绝大多数IOS ,Android等智能手机RPG游戏都有虚拟键来控制主角的移动,攻击等操作。所以本游戏也不例外。
废话不多说,上代码来的实际些。
1.虚拟键的设计
Config.h
/*******自定义创建scene的宏********/
#define CREATE_SCENE(__TYPE__) \
static Scene* scene() \
{ \
Scene *scene = Scene::create(); \
__TYPE__ *layer = __TYPE__::create() ; \
scene->addChild(layer); \
return scene; \
} \
#define winSize Director::getInstance()->getWinSize()
JoyStick.h
#ifndef __JoyStick__H_H
#define __JoyStick__H_H
#include "cocos2d.h"
#include "Config.h"
using namespace std;
USING_NS_CC;
class JoyStick;
//JoyStick的代理类
class JoyStickDelegate
{
public:
virtual void onJoyStickUpdate(Node*sender,float angle,Point direction,float power) =0;
};
class JoyStick:public Sprite
{
private:
CC_SYNTHESIZE(Sprite *, Ball, bBall); //更随手势转动的球
CC_SYNTHESIZE(Sprite *, Dock, dDock); //底座
CC_SYNTHESIZE(int, MoveAreaRadius, mMoveAreaRadius); //移动半径
CC_SYNTHESIZE(int, BallRadius, bBallRadius); //球半径
CC_SYNTHESIZE(Rect, ActiveRect, aActiveRect);
CC_SYNTHESIZE(int, ActiveRadius, aActiveRadius);
CC_SYNTHESIZE(Point, CurrentPoint, cCurrentPoint);
CC_SYNTHESIZE(bool, IsFollowTouch, iIsFollowTouch);
CC_SYNTHESIZE(bool, IsCanVisible, iIsCanVisible);
CC_SYNTHESIZE(bool, IsAutoHide, iIsAutoHide);
CC_SYNTHESIZE(bool, IsTouched, iIsTouched);
CC_SYNTHESIZE(bool, HasAnimation, hHasAnimation);
CC_SYNTHESIZE(float, Power, pPower);
CC_SYNTHESIZE(float, Angle, aAngle);
CC_SYNTHESIZE(Point, Direction, dDirection);
CC_SYNTHESIZE(JoyStickDelegate*, _delegate, Delegate);//代理
public:
// 自定义实例函数
static JoyStick * createJoyStick(const string&dockName,const string&ballName,int ballradius,int movearearadius,bool isfollowtouch,bool iscanvisible,bool isautohide,bool hasanimation);
/**********
函数参数说明:
1.参数dockName :底座背景图名称
2.参数ballName :旋转球名称
3.参数ballradius :旋转球的半径
4.参数movearearadius :旋转球活动半径
5.参数isfollowtouch :是否跟随触摸
6.参数iscanvisible :是否可见
7.参数isautohide :是否自动隐藏(即用户没有操作英雄时,隐藏操作键)
8.参数hasanimation :是否带动画
**********/
void initWithBallRadius(int ballradius,int movearearadius,bool isfollowtouch,bool iscanvisible,bool isautohide,bool hasanimation) ;
void setBallText