零基础学习IOS开发(三)- cocos2d-x3.0 显示图像及基本动画效果

来源:互联网 发布:js弹性防水涂料 编辑:程序博客网 时间:2024/05/01 08:55

前两篇学习日志刚发布就有一个博友回复了,感到很意外,同时也觉得自己做的事是有意义的,我会继续学习IOS,也会继续和大家分享学习过程,一起共同探讨,共同进步。

这里跟大家分享一个cocos2d-x的入门视频教程,讲授者讲得很清晰很有条理,学起来很轻松就能记住,可以直接在线看也可以下载(当然看完视频还得自己练练手啦)CSDN不让发链接,手动把#号去除吧:htt#p://pan.bai#du.com/s/1hqn7#qja

这次和大家分享的是cocos2d-X3.0中显示图像(使用精灵Sprite),以及一些很基本的动画效果,如移动、旋转、缩放等,如有错误请在评论中指正,在这里谢谢了!

零基础学习IOS开发(三)- cocos2d-x3.0 显示图像及基本动画效果


用上一篇学习日志中的cocos指令创建一个cocos2d-x工程,用Xcode打开,然后选中Classes文件夹中的HelloWorldScene.cpp,

在init()的实现中只保留

    if ( !Layer::init() )    {        return false;    }        //......
    return true;
即可。
在这两条代码中间就可以添加你自己的代码了。


一、显示图像

使用

auto 变量名 = Sprite::create("图片地址");

这里的auto也可以改成Sprite,cocos2d-x可以根据之后的赋值语句自动判断变量类型,因此可以直接使用auto。
这样就可以创建一个精灵
    auto leftdoor = Sprite::create("left_door.png");
    Size visibleSize = Director::getInstance()->getVisibleSize();//这句的效果是获取屏幕可见范围,这样就可以使用下方的
visibleSize.width了
leftdoor->setAnchorPoint(Point(1, 0.5)); leftdoor->setPosition(Point(visibleSize.width/2, visibleSize.height/2)); this->addChild(leftdoor);
setAnchorPoint用来设置锚点,
setPosition用来设置位置
(锚点和位置的定义在上面我给出的视频教程中说的很清楚啦这里我就不解释了),
最后一句就是用来将你定义的精灵显示在界面上的方法。

写完以上的代码就可以build然后run啦~!


二、基本动画效果


定义移动:auto move =MoveTo::create(1.0f,Point(100,100));
移动有两个参数,第一个是移动的时间,第二个是相对移动的向量Point。

定义缩放:auto scale = ScaleTo::create(1.0f, 2, 0.5);
缩放有三个参数,第一个是缩放的时间,第二个是宽度的缩放倍数,第三个是高度的缩放倍数。

定义旋转:auto rotate = RotateTo::create(1.0f, 180);
旋转有两个参数,第一个是旋转的时间,第二个是旋转的角度(不是弧度哦,180就是180度)。

定义好动画效果之后只需要输入类似:
picture->runAction(move);
其中picture就是你要运动的控件名称,如上文中的leftdoor;
move就是你在上面定义的运动的名称(如上文定义的:move, scale, rotate)。

很简单吧!看完了视频之后忍不住动手写了代码试试,实现的功能是显示两扇门,等待两秒后两扇门向两边打开(和视频教程中差不多):

零基础学习IOS开发(三)- cocos2d-x3.0 显示图像及基本动画效果

零基础学习IOS开发(三)- cocos2d-x3.0 显示图像及基本动画效果

值得注意的是,我这里将程序底色改成了白色(默认是黑色的),修改方法如下:

将HelloWorldScene.h中HelloWorld类的继承语句改成:

class HelloWorld : public cocos2d::LayerColor
然后将HelloWorldScene.cpp中的
if ( !Layer::init() )
改为
if ( !LayerColor::initWithColor(Color4B(255,255,255,255)) ) //Color4B的参数为RGB数值

下面是HelloWorldScene.cpp的内容:

#include "HelloWorldScene.h"USING_NS_CC;Scene* HelloWorld::createScene(){    // 'scene' is an autorelease object    auto scene = Scene::create();        // 'layer' is an autorelease object    auto layer = HelloWorld::create();    // add layer as a child to scene    scene->addChild(layer);        // return the scene    return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){    //////////////////////////////    // 1. super init first    if ( !LayerColor::initWithColor(Color4B(255,255,255,255)) )    {        return false;    }        Size visibleSize = Director::getInstance()->getVisibleSize();    auto leftdoor = Sprite::create("left_door.png");    leftdoor->setAnchorPoint(Point(1, 0.5));    leftdoor->setPosition(Point(visibleSize.width/2, visibleSize.height/2));    //this->addChild(leftdoor);        auto rightdoor = Sprite::create("right_door.png");    rightdoor->cocos2d::Node::setAnchorPoint(Point(0,0.5));    rightdoor->setPosition(Point(visibleSize.width/2, visibleSize.height/2));    //this->addChild(rightdoor);        auto leftlogo = Sprite::create("left_logo.png");    leftlogo->setAnchorPoint(Point(1, 0.5));    leftlogo->setPosition(Point(visibleSize.width/2, visibleSize.height/2));    //this->addChild(leftlogo);        auto rightlogo = Sprite::create("right_logo.png");    rightlogo->setAnchorPoint(Point(0, 0.5));    rightlogo->setPosition(Point(visibleSize.width/2, visibleSize.height/2));    //this->addChild(rightlogo);        auto leftNode = Node::create();    leftNode->addChild(leftdoor);    leftNode->addChild(leftlogo);    this->addChild(leftNode);        auto rightNode = Node::create();    rightNode->addChild(rightdoor);    rightNode->addChild(rightlogo);    this->addChild(rightNode);        auto delay = DelayTime::create(2.0f);    auto moveLeft = MoveTo::create(1.0f,Point(-visibleSize.width/2, 0));    auto moveRight = MoveTo::create(1.0f,Point(visibleSize.width/2, 0));    auto seqLeft = Sequence::create(delay,moveLeft,NULL);    auto seqRight = Sequence::create(delay,moveRight,NULL);        leftNode->runAction(seqLeft);    rightNode->runAction(seqRight);        return true;}void HelloWorld::menuCloseCallback(Ref* pSender){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");    return;#endif    Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)    exit(0);#endif}


0 0