cocos2dx中用触摸机制实现在一个方向上拖动精灵。

bool AwardDailyLayer::onTouchBegan(Touch* touch,Event* event)

{

    pointBegin = touch->getLocation();

    

    Sprite * sprite = (Sprite*)m_RegisterBox;

    Rect rect = sprite->boundingBox();

    

    if(rect.containsPoint(pointBegin))

    {

        return true;

    }

    return false;

}



void AwardDailyLayer::onTouchMoved(Touch* touch,Event* event)

{


    Point point = touch->getLocation();

    Point pointPre = touch->getPreviousLocation();

    

    Point direction = ccpSub(point,pointPre);

    Sprite * sprite = (Sprite*)m_RegisterBox;

    

    Point spritePoint = sprite->getPosition();

    Point spriteDirection = ccpAdd(spritePoint,direction);


    CCLOG("spriteDirection.X is %f",spriteDirection.x);

    //限制在一定的范围之类

    if(spriteDirection.x <= -610)

    {

        spriteDirection.x = -610;

    }

    else if(spriteDirection.x >= 0)

    {

        spriteDirection.x = 0;

    }

    

    sprite->setPosition(Point(spriteDirection.x,sprite->getPosition().y));


}



void AwardDailyLayer::onTouchEnded(Touch* touch,Event* event)

{

    

    

}

此段代码很清晰,就不做过多的解释了!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个效果,可以使用cocos2d-x自带的物理引擎来实现。具体步骤如下: 1. 创建一个物理世界,并设置重力加速度为向下的9.8米/秒。 2. 创建一个刚体节点,并设置其重力缩放因子为0,这样可以让节点不受重力影响。 3. 在节点上添加一个向上的冲量,使其向上抛物。 4. 在物理世界中添加一个触发器,当节点进入触发器范围内时,执行下落动画。 5. 在下落动画中,逐帧修改节点的位置,使其做匀减速运动。 下面是代码实现的示例: ```c++ // 创建物理世界 auto physicsWorld = PhysicsWorld::construct(Vec2(0, -980)); this->addChild(physicsWorld); // 创建刚体节点 auto node = Node::create(); auto body = PhysicsBody::createCircle(50); body->setGravityEnable(false); node->setPhysicsBody(body); this->addChild(node); // 添加向上的冲量 body->applyImpulse(Vec2(0, 1000)); // 添加触发器 auto trigger = PhysicsTrigger::createBox(Size(100, 100)); trigger->setPosition(Vec2(0, 0)); trigger->setTag(1); trigger->setCollisionBitmask(0xFF); trigger->setContactTestBitmask(0xFF); trigger->setDynamic(false); physicsWorld->addTrigger(trigger); // 下落动画 auto startPos = node->getPosition(); auto endPos = Vec2(0, 0); float t = 0; float totalTime = 5; this->schedule([=](float dt){ t += dt; if(t > totalTime) { node->setPosition(startPos); node->getPhysicsBody()->setVelocity(Vec2::ZERO); return; } float s = (totalTime - t) / totalTime; float y = startPos.y + (endPos.y - startPos.y) * (1 - s * s); float x = startPos.x + (endPos.x - startPos.x) * (1 - s); node->setPosition(Vec2(x, y)); }, 0, "falling"); ``` 在上面的代码中,我们创建了一个物理世界,并设置了重力加速度为-980(相当于9.8米/秒的平方)。然后我们创建了一个刚体节点,并设置其重力缩放因子为0,这样可以让节点不受重力影响。接着我们给节点添加了一个向上的冲量,使其向上抛物。然后我们创建了一个触发器,当节点进入触发器范围内时,执行下落动画。在下落动画中,我们逐帧修改节点的位置,使其做匀减速运动。 注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值