cocos2d-x--->飞机大战的第二天0907

先把昨天实现的功能先写下,昨天因为各种事然后博客的够没有及时更新。

背景的滚动:

this->schedule(schedule_selector(GameScene::autoremove), 0.03f);//设置定时器
Size visibleSize = Director::getInstance()->getVisibleSize();
    auto b = this->getChildByTag(10);
    b->setPositionY(b->getPositionY()-10);

    auto b1 = this->getChildByTag(8);
    b1->setPositionY(b1->getPositionY() - 10);

实现背景的滚动主要的核心是添加计时器,然后不断的循环,y轴 的坐标是通过减少的方式是实现背景的移动,再是通过添加两张背景实现重复的功能。

添加英雄类:

//添加英雄飞机
    Size visibleSize = Director::getInstance()->getVisibleSize();
    plane = Sprite::create("feiji.png");
    //设置起始位置
    plane->setPosition(ccp(visibleSize.width / 2, visibleSize.height / 5));
    this->addChild(plane);

    auto action = Blink::create(5,10);//添加英雄闪烁的效果
    plane->runAction(action);

这里的添加飞机主要是和以前添加背景的步骤是一样的,就是新建一个类,然后在主场景中实现调用添加就是可以的。
还有就是添加了飞机的闪烁的效果,这里有还好多的效果,都要学会用。

添加子弹类:

//添加子弹
    Size visibleSize = Director::getInstance()->getVisibleSize();
    auto Buttle = Sprite::create("buttle.png");

    //设置起始位置
    auto sss = this->plane->getPlane();
//  CCLOG("sss->x:%f", sss->getPositionX());

    this->addChild(Buttle);

这里添加的子弹都是一样的,注意设置子弹的起始位置还有就是让子弹实现自动消失,自动清除内存。

auto move = MoveTo::create(2, ccp(sss->getPositionX(), visibleSize.height + Buttle->getContentSize().height / 2));
    Buttle->runAction(move);

实现自动清除内存。

实现子弹的连续发射:

void Buttle::move(){

    this->schedule(schedule_selector(Buttle::moveto), 0.5f);//设置定时器
}


void Buttle::moveto(float dt){
    //添加子弹
    Size visibleSize = Director::getInstance()->getVisibleSize();
    auto Buttle = Sprite::create("buttle.png");

    //设置起始位置
    auto sss = this->plane->getPlane();
//  CCLOG("sss->x:%f", sss->getPositionX());

    this->addChild(Buttle);
    Buttle->setPosition(ccp(sss->getPosition().x, sss->getPosition().y+80));
    Buttle->runAction(move);

要实现飞机的连续发射就是用一个计时器,然后用通过Move 的动作实现发射
这样就可以实现子弹的连续发射。

实现点击,移动的功能:

//添加点击事件

// Make sprite1 touchable
    auto listener1 = EventListenerTouchOneByOne::create();
    listener1->setSwallowTouches(true);

    listener1->onTouchBegan = [](Touch* touch, Event* event){
        auto target = static_cast<Sprite*>(event->getCurrentTarget());

        //Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
        Size s = target->getContentSize();
        Rect rect = Rect(0, 0, s.width, s.height);

        if (rect.containsPoint(target->convertToNodeSpace(touch->getLocation())))
        {
            //log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);
            target->setOpacity(255);
            return true;
        }
        return false;
    };

    listener1->onTouchMoved = [](Touch* touch, Event* event){
        auto target = static_cast<Sprite*>(event->getCurrentTarget());
        target->setPosition(target->getPosition() + touch->getDelta());
。。。。。。。
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, plane);

添加触摸事件,然后有事件的监听,实现移动的功能。

实现飞机的边界对问题:


        if (target->getPositionX()<= target->getContentSize().width / 2)
        {
            float xx =  target->getContentSize().width / 2;
            target->setPositionX(xx);
        }
        else if (target->getPositionY() + touch->getDelta().y <= target->getContentSize().height / 2){
            target->setPositionY(target->getContentSize().height / 2);
        }

        else{
            target->setPositionY(target->getPosition().y + touch->getDelta().y);
        }

对边界的判断实现飞机判断,对于外面的不能触摸的。

实现飞机和子弹的绑定:

子弹还有飞机的绑定主要是有一个单例模式。主要是把子弹在飞机类中可以实现调用。

Buttle::Buttle(Plane *p){

    this->plane = p;
    move();
}
void Buttle::move(){

    this->schedule(schedule_selector(Buttle::moveto), 0.5f);//设置定时器
}
Plane * Plane::p = NULL;
Plane* Plane:: show(){
    if (NULL==p)
    {
        p=new Plane();
    }
    return p;

}

Plane::Plane()
{
    createInit();
}

还最重要的是创建静态创建对象,静态的方法
还有就是绑定的时候,记得飞机是全局的变量,这样才会被其他的访问。

《C++编程实例100篇》是一本深入实践、极具价值的编程教程,它针对C++编程语言提供了丰富的实例,旨在帮助读者更好地理解和掌握C++的各项特性与编程技巧。这本书的经典之处在于它将理论与实践相结合,通过100个精心设计的编程实例,覆盖了C++的各个核心领域,包括基础语法、面向对象编程、模板、异常处理、STL(标准模板库)等。 我们来探讨C++的基础语法。C++是C语言的增强版,它保留了C语言的高效性和灵活性,并引入了类、对象和继承等面向对象编程概念。基础语法包括变量声明、数据类型、运算符、控制结构(如if语句、for循环、while循环)、函数的定义和调用等。在实例中,你可能会遇到如何编写简单的程序,如计算两个数的和,或者实现一个简单的猜数字游戏。 C++的面向对象编程是其一大特色。通过类和对象,你可以构建复杂的软件系统。类是对象的蓝图,它定义了对象的属性和行为。实例化一个类,就是创建一个具体的对象。继承允许你创建新的类,这些类从现有的类派生,共享其属性和方法,同时可以添加新的功能。多态性是面向对象的另一个关键特性,它使得不同类型的对象可以对同一消息作出不同的响应。这些概念在实例中会以各种形式展现,例如设计一个图形界面的类层次,或实现一个简单的模拟游戏。 接下来是模板,C++的模板功能让代码更加通用,可以处理不同类型的数据。模板分为函数模板和类模板,前者可以创建泛型函数,后者可以创建泛型类。通过模板,你可以编写出高效且灵活的代码,比如实现一个通用的排序算法。 异常处理是C++中用于处理程序运行时错误的机制。当程序出现异常情况时,可以抛出一个异常,然后在适当的点捕获并处理这个异常。这使得代码能够优雅地处理错误,而不是让程序崩溃。实例中可能会有涉及文件操作或网络通信时可能出现的异常处理示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值