Cocos2d-x 3.0 RPG 回合制游戏实战 (一)虚拟操作键(虚拟遥感)

本文介绍了使用Cocos2d-x 3.0重现实现的RPG回合制游戏中,虚拟操作键(虚拟遥感)的设计与实现。文章详细讲解了JoyStick的头文件定义,以及如何在TileLayer场景中通过点击屏幕显示和隐藏虚拟遥感,为游戏主角的移动和操作提供控制。
摘要由CSDN通过智能技术生成

     注:这个游戏是根据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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值