gpt4 book ai didi

ios - Cocos2d 纵向模式下的偏移问题

转载 作者:行者123 更新时间:2023-11-29 11:00:56 24 4
gpt4 key购买 nike

我在 Ray Wenderlich 关于 Cocos 2d 中旋转炮塔的教程的基础上工作(参见此处:http://www.raywenderlich.com/25791/rotating-turrets-how-to-make-a-simple-iphone-game-with-cocos2d-2-x-part-2)。我需要我的游戏处于纵向模式,这样我才能正确获得炮塔的位置:enter image description here

炮塔设法向右射击,但没有向左射击。这是我的代码:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if (_nextProjectile != nil) return;

// Choose one of the touches to work with
UITouch *touch = [touches anyObject];
CGPoint location = [self convertTouchToNodeSpace:touch];

// Set up initial location of projectile
CGSize winSize = [[CCDirector sharedDirector] winSize];
_nextProjectile = [[CCSprite spriteWithFile:@"projectile2.png"] retain];
_nextProjectile.position = ccp(160, 20);

// Determine offset of location to projectile
CGPoint offset = ccpSub(location, _nextProjectile.position);

// Bail out if you are shooting down or backwards
if (offset.x <= 0) return;

// Determine where you wish to shoot the projectile to
int realX = winSize.width + (_nextProjectile.contentSize.width/2);
float ratio = (float) offset.y / (float) offset.x;
int realY = (realX * ratio) + _nextProjectile.position.y;
CGPoint realDest = ccp(realX, realY);

// Determine the length of how far you're shooting
int offRealX = realX - _nextProjectile.position.x;
int offRealY = realY - _nextProjectile.position.y;
float length = sqrtf((offRealX*offRealX)+(offRealY*offRealY));
float velocity = 480/1; // 480pixels/1sec
float realMoveDuration = length/velocity;

// Determine angle to face
float angleRadians = atanf((float)offRealY / (float)offRealX);
float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
float cocosAngle = -1 * angleDegrees;
float rotateDegreesPerSecond = 180 / 0.5; // Would take 0.5 seconds to rotate 180 degrees, or half a circle
float degreesDiff = _player.rotation - cocosAngle;
float rotateDuration = fabs(degreesDiff / rotateDegreesPerSecond);
[_player runAction:
[CCSequence actions:
[CCRotateTo actionWithDuration:rotateDuration angle:cocosAngle],
[CCCallBlock actionWithBlock:^{
// OK to add now - rotation is finished!
[self addChild:_nextProjectile];
[_projectiles addObject:_nextProjectile];

// Release
[_nextProjectile release];
_nextProjectile = nil;
}],
nil]];

// Move projectile to actual endpoint
[_nextProjectile runAction:
[CCSequence actions:
[CCMoveTo actionWithDuration:realMoveDuration position:realDest],
[CCCallBlockN actionWithBlock:^(CCNode *node) {
[_projectiles removeObject:node];
[node removeFromParentAndCleanup:YES];
}],
nil]];

_nextProjectile.tag = 2;

感谢您的帮助!

最佳答案

你正在检查 x 轴而不是 Y

// Bail out if you are shooting down or backwards
if (offset.x <= 0) return

;

关于ios - Cocos2d 纵向模式下的偏移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com