cocos2d-x如何发射子弹

cocos2d-x如何发射子弹

现在,我们想让英雄能发射子弹来消灭敌人,添加以下的代码,来设置图层支持触摸。
 
先上代码

1// cpp with cocos2d-x

2this->setIsTouchEnabled(true);

1// objc with cocos2d-iphone

2self.isTouchEnabled = YES;

这样我们就能接受到touch event的了。

在HelloWorldScene.h里声明回调函数“void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);”,并在HelloWorldScene.cpp实现这个函数。

1// cpp with cocos2d-x

2void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)

3{

4 // Choose one of the touches to work with

5 CCTouch* touch = (CCTouch*)( touches->anyObject() );

6 CCPoint location = touch->locationInView(touch->view());

7 location = CCDirector::sharedDirector()->convertToGL(location);

8

9 // Set up initial location of projectile

10 CCSize winSize = CCDirector::sharedDirector()->getWinSize();

11 CCSprite *projectile = CCSprite::spriteWithFile("Projectile.png",

12 CCRectMake(0, 0, 20, 20));

13 projectile->setPosition( ccp(20, winSize.height/2) );

14

15 // Determinie offset of location to projectile

16 int offX = location.x - projectile->getPosition().x;

17 int offY = location.y - projectile->getPosition().y;

18

19 // Bail out if we are shooting down or backwards

20 if (offX <= 0) return;

21

22 // Ok to add now - we've double checked position

23 this->addChild(projectile);

24

25 // Determine where we wish to shoot the projectile to

26 int realX = winSize.width

27 + (projectile->getContentSize().width/2);

28 float ratio = (float)offY / (float)offX;

29 int realY = (realX * ratio) + projectile->getPosition().y;

30 CCPoint realDest = ccp(realX, realY);

31

32 // Determine the length of how far we're shooting

33 int offRealX = realX - projectile->getPosition().x;

34 int offRealY = realY - projectile->getPosition().y;

35 float length = sqrtf((offRealX * offRealX)

36 + (offRealY*offRealY));

37 float velocity = 480/1; // 480pixels/1sec

38 float realMoveDuration = length/velocity;

39

40 // Move projectile to actual endpoint

41 projectile->runAction( CCSequence::actions(

42 CCMoveTo::actionWithDuration(realMoveDuration, realDest),

43 CCCallFuncN::actionWithTarget(this,

44

45 callfuncN_selector(HelloWorld::spriteMoveFinished)),

46 NULL) );

47}

1// objc with cocos2d-iphone

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

3{

4 // Choose one of the touches to work with

5 UITouch *touch = [touches anyObject];

6 CGPoint location = [touch locationInView:[touch view]];

7 location = [[CCDirector sharedDirector] convertToGL:location];

8

9 // Set up initial location of projectile

10 CGSize winSize = [[CCDirector sharedDirector] winSize];

11 CCSprite *projectile = [CCSprite spriteWithFile:@"Projectile.png"

12 rect:CGRectMake(0, 0, 20, 20)];

13 projectile.position = ccp(20, winSize.height/2);

14

15 // Determine offset of location to projectile

16 int offX = location.x - projectile.position.x;

17 int offY = location.y - projectile.position.y;

18

19 // Bail out if we are shooting down or backwards

20 if (offX <= 0) return;

21

22 // Ok to add now - we've double checked position

23 [self addChild:projectile];

24

25 // Determine where we wish to shoot the projectile to

26 int realX = winSize.width + (projectile.contentSize.width/2);

27 float ratio = (float) offY / (float) offX;

28 int realY = (realX * ratio) + projectile.position.y;

29 CGPoint realDest = ccp(realX, realY);

30

31 // Determine the length of how far we're shooting

32 int offRealX = realX - projectile.position.x;

33 int offRealY = realY - projectile.position.y;

34 float length = sqrtf((offRealX*offRealX)+(offRealY*offRealY));

35 float velocity = 480/1; // 480pixels/1sec

36 float realMoveDuration = length/velocity;

37

38 // Move projectile to actual endpoint

39 [projectile runAction:[CCSequence actions:

40 [CCMoveTo actionWithDuration:realMoveDuration position:realDest],

41 [CCCallFuncN actionWithTarget:self

42

43 selector:@selector(spriteMoveFinished:)],

44 nil]];

45}

好了,编译并运行,触摸屏幕(使用的是模拟器?点击屏幕!),享受一下效果。

PS: 为了和Object-C代码保持一致,这里可能会有一些“float”到“int”隐式转换导致的警告,请忽略它们。

Win32

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值