zoukankan      html  css  js  c++  java
  • ios游戏开发--cocos2d学习(3)

    ------------继续上一节的内容。
    • “接收触摸事件”:

    CCLayer类是用来接收触摸输入的。不过你要首先启用这个功能才可以使用它。 

    self.isTouchEnabled = YES;//此项设定最好在init方法中设置。可以在任何时间将其设置为NO或YES。

    一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用:

    1. 当手指首次--触摸到屏幕--时调用的方法:
      -(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent*)event

    2. 手指在屏幕上--移动--时调用的方法:
      -(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent*)event

    3. 当手指--从屏幕上提起--时调用的方法:

    -(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent*)event

     

    触摸事件由Cocoa Touch API接收,所以触摸的位置必须被转换为OpenGL的坐标。以下是一个用来转换坐标的方法:

    -(CGPoint)locationFromTouches:(NSSet *)touches

    {

    UITouch *touch = [touches anObject];//将触摸产生的对象从NSSet集合中实体化

    //获取触摸点在视图中的位置

    CGPoint touchLocation = [touch locationInView:[touch view]];

    return [[CCDirector sharedDirector] convertToGL:touchLocation];

    }

     

    现在,使用一套有点不一样的方法来代替默认的触摸输入处理方法。它们几乎完全一样,除了一点:用 (UITouch *)touch 代替 (NSSet *)touches 作为方法的第一个参数:
    -(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {}

     -(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {}  -(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {}

    这里很重要的一点是:ccTouchBegan返回的是一个布尔值(BOOL)。如果你返 回了YES,那就意味着你不想让当前的触摸事件传导到其它触摸事件处理器。你实际上是“吞下了”这个触摸事件。 

     

    • “接收加速计事件”:

     

    和触摸输入一样,加速计必须在启用以后才能接收加速计事件: 

    self.isAccelerometerEnabled = YES;

     

    -(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
    {

           CCLOG(@"acceleration: x:%f / y:%f / z:%f", acceleration.x, acceleration.y,
    acceleration.z);
    
    

    由于在模拟器上不能够测试加速计事件,所以就咱不多做介绍。

     

    • CCSprite最常用的类:精灵----游戏中的元素

    它使用图片把精灵(sprite)显示在屏幕上,必须把需要用到的图片文件放进Xcode的Resources组中:

    CCSprite * player=[CCSprite spriteWithFile:@"玩家.png"];

    [self addChild:player];

    下面说一下关于精灵贴图的位置和精灵的位置关系,这个对于新手来说是个困惑的地方。

    有两个位置属性:position和anchorPoint

    positon:永远是中心点的位置。我们对精灵使用这个属性,就是确定中心点的位置。

    定位点--anchorPoint:在给精灵附上图片后才有意义,其实指的就是将要加进来的图片它左下角的位置,只不过这个位置是个相对位置,实际位置是精灵中心点的位置乘以anchorPoint的值。例如精灵在位置(100,100),图片大小为100X100,如果anchorPoint为(0.5,0.5),则图片“左下角”的位置为(100x0.5,100x0.5),那么图片实际中心位置为(100,100),这就和精灵完全匹配,这也是为什么anchorPoint多设置为(0.5,0.5)的原因,同样如果anchorPoint为(0,0),则图片在屏幕左下角,中心在(50,50),也完整的显示出来。

     

    •  CCLabel--显示文字:有3种类型:CCLabelTTF、CCLabelBMFont、CCLabelAtlas

     CCLabel的操作常用的就几个,设置文字内容,字体,大小以及对齐方式:

    label = [CCLabel labelWithString:@"text" fontName:@"AppleGothic" fontSize:32];

    不应该经常改变文字,重建文字标签的贴图非常耗时。

    label.position = ccp(100,100);//ccp就是CGPoint,这里写成CGPointMake,效果一样

    label.anchorPoint=ccp(1,1);//设置图片的“左下角”位置,即(100,100),即中心点在标签右上角

     

    • 菜单--CCMenu类,它只支持CCMenuItem节点作为它的子节点

    //更改CCMenuItemFont的默认属性

    [CCMenuItemFont setFontName:@"Helvetica-BoldOblique"];//字体类型

    [CCMenuItemFont setFontSize:26];//字体大小

    //创建一个文字类型的菜单选项item1,并制定选择器

    CCMenuItemFont *item1=[CCMenuItemFont itemFromString:@"Setting" target:self selector:@selector(touchedMethod)];//CCMenuItemFont只是简单的生成一个CCLabel

    //创建一个精灵类型的菜单选项,使用已有的精灵生成一个菜单项

    CCSprite *normal=[CCSprite spriteWithFile:@"Icon.png"];//正常状态时的精灵

    normal.color=ccRED;

    CCSprite *selected=[CCSprite spriteWithFile:@"IconS.png"];//被选择状态时的精灵

    selected.color=ccGREEN;

    CCMenuItemSprite *item2=[CCMenuItemSprite itemFromNormalSprite:normal selectedSprite:selected target:self selector:@selector(touchedMethod)];//CCMenuItemSprite其实就是一个CCMenuItemImage

    //制作第三种类型的菜单项:可切换菜单项CCMenuItemToggle

    CCMenuItemFont *on=[CCMenuItemFont itemFromString:@"ON"];

    CCMenuItemFont *off=[CCMenuItemFont itemFromString:@"OFF"];

    CCMenuItemToggle *item3=[CCMenuItemToggle itemWithTarget:self selector:@selector(touchedMethod) items:on,off,nil];

    CCMenuItemToggole只接受两个继承自CCMenuItem的对象作为参数,当用户点击时,会在两个状态之间进行切换,这里是两种状态的文字,当然你也可以在CCMenuItemToggle里使用图片。

    //最后集成一个菜单

    CCMenu *menu = [CCMenu menuWithItems:item1,item2,item3,nil];

    menu.position = ccp(230,160);

    [self addChild:menu];

    //注意菜单项的排列对齐,避免菜单项的层叠,这个方法必须写

    [menu alignItemsVerticallyWithPadding:40];//设置垂直方向上的间距

  • 相关阅读:
    内置对象,监听器,过滤器
    20169201 使用Metaspoit攻击MS08-067实验
    20169201 2016-2017-2《网络攻防》课程总结
    20169201 2016-2017-2 《网络攻防》第十四周作业
    20169201 2016-2017-2 《网络攻防实践》第11周学习总结
    20169201 2016-2017-2 《移动平台开发实践》第10周学习总结
    20169201 2016-2017-2 《网络攻防实践》第10周学习总结
    20169201 实验三 敏捷开发与XP实践报告
    20169201 2016-2017-2 《网络攻防实践》 实验二
    20169201 2016-2017-2 实验一 网络攻防实验环境的搭建与测试
  • 原文地址:https://www.cnblogs.com/gl5773477/p/3971144.html
Copyright © 2011-2022 走看看