【Cocosd2d实例教程五】Cocos2d添加虚拟摇杆控制器

(转载请注明出处:http://blog.csdn.net/buptgshengod

1.介绍

    cocos2d为我们提供了好用的摇杆控制器,主要是对ZJoystick.h和ZJoystick.m的添加,实现了如下图的功能。通过摇杆可以控制图中精灵的移动。(但是还有一个技术性问题亟待解决,就是精灵移动后会有一个重影留在初始位置
【Cocosd2d实例教程五】Cocos2d添加虚拟摇杆控制器

2.摇杆的实现

   1) 将资源中的ZJoystick文件夹加到工程中(页面下方提供下载地址), 精灵的添加以及移动前面已经讲了,不知道的同学可以看教程四。工程名字为ControlWalking【Cocosd2d实例教程五】Cocos2d添加虚拟摇杆控制器

    2)修改HelloWorldLayer.h文件。加入一些需要的节点参数。

#import <GameKit/GameKit.h>

// When you import this file, you import all the cocos2d classes
#import "cocos2d.h"
#import "ZJoystick.h"
// HelloWorldLayer
@interface HelloWorldLayer : CCLayer<ZJoystickDelegate>
{
	CCTexture2D *spriteTexture_;	// weak ref
	//b2World* world;					// strong ref
	//GLESDebugDraw *m_debugDraw;		// strong ref
    
    //CCTMXTiledMap *_gameMap;
    CCSprite    *_player;//是精灵,图中的熊猫
}

// returns a CCScene that contains the HelloWorldLayer as the only child
+(CCScene *) scene;

@end

    3)  修改HelloWorldLayer.m文件。

  首先,在HelloWorld接口中定义摇杆函数
@interface HelloWorldLayer()
//-(void) initPhysics;
-(void) initJoystick;
@end

 接着,添加initJoystick函数,方便在init中调用。
-(void) initJoystick{
    
    ZJoystick *_joystick2		 = [ZJoystick joystickNormalSpriteFile:@"JoystickContainer_norm.png"
                                               selectedSpriteFile:@"JoystickContainer_trans.png"
                                             controllerSpriteFile:@"Joystick_norm.png"];
    _joystick2.position          = ccp(_joystick2.contentSize.width/2 + 10,
                                       _joystick2.contentSize.height/2 + 10);
    _joystick2.delegate          = self;    //Joystick Delegate
    _joystick2.controlledObject  = _player;
    _joystick2.speedRatio        = 2.0f;
    _joystick2.joystickRadius    = 50.0f;   //added in v1.2
    _joystick2.joystickTag       = 999;
    [self addChild:_joystick2];
    
}

下一步,添加Joystick的一些属性,也直接写在HelloWorldLayer.m文件里。
#pragma mark - zJoystick delegate methods
-(void)joystickControlBegan {
    //	CCLOG(@"Joystick Began Controlling");
	
}

-(void)joystickControlMoved {
    //	CCLOG(@"Joystick Move Controlling");
	
}

-(void)joystickControlEnded {
    //	CCLOG(@"Joystick End Controlling");
	
}

-(void)joystickControlDidUpdate:(id)joystick toXSpeedRatio:(CGFloat)xSpeedRatio toYSpeedRatio:(CGFloat)ySpeedRatio{
    
    ZJoystick *zJoystick = (ZJoystick *)joystick;
    
    if (zJoystick.joystickTag == 999) {
        CGFloat xPos = _player.position.x;
        CGFloat yPos = _player.position.y;
        _player.position = ccp(xPos + xSpeedRatio, yPos + ySpeedRatio);//定义精灵的移动方式
    }
}
@end
最后一步就是要修改,init函数。前提是我们已经添加完成精灵(也就是图中的熊猫,前面第四章讲了)。
其实只要将精灵对象付给头文件中定义的_player,再调用一下前面定义的initJoystick就可以了。
_player=panda;//panda为自己定义的精灵对象
[self initJoystick];//调用initJoystick函数
(程序源代码资源下载地址)




        


上一篇:利用jenkins的api来完成相关工作流程的自动化


下一篇:使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)