3D перспективный вид в игре для iPhone с использованием cocos2d - PullRequest
7 голосов
/ 26 марта 2012

Я разрабатываю 'Paper Toss' для iphone, используя cocos2d, и я хотел бы знать, как реализовать в этом виде перспективы 3D, потому что пока мы бросаем бумажный шарик в мусорное ведро, мы должны получить3D чувствую. Я прилагаю код, который я сделал, используя это, я получил прямолинейное движение. Пожалуйста, помогите мне ..

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

// Choose one of the touches to work with
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];

// Set up initial location of projectile
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *projectile = [CCSprite spriteWithFile:@"ball.png" 
                                           rect:CGRectMake(0, 0, 40, 40)];
projectile.position = ccp(winSize.width/2,20);

// Determine offset of location to projectile
int offX = location.x - projectile.position.x;
int offY = location.y - projectile.position.y;

// Bail out if we are shooting down or backwards
if (offY <= 0) return;

// Ok to add now - we've double checked position
[self addChild:projectile];

// Determine where we wish to shoot the projectile to
int realY = winSize.height + (projectile.contentSize.width/2);
float ratio = (float) offX / (float) offY;
int realX = (realY * ratio) + projectile.position.x;
CGPoint realDest = ccp(realX, realY);

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

// Move projectile to actual endpoint
[projectile runAction:[CCSequence actions:
                       [CCMoveTo actionWithDuration:realMoveDuration position:realDest],
                       [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)],
                       nil]];
//add to the projectiles array
projectile.tag = 2;
[_projectiles addObject:projectile];

} *

Ответы [ 3 ]

7 голосов
/ 03 апреля 2012

Наконец я выполнил бросок бумаги, используя cocos2d. Я реализовал кривую Безье, и вот она,

  // Bezier curve control points
  bezier.controlPoint_1 = ccp(location.x-CONTROL_POINT1_X, CONTROL_POINT1_Y);
  bezier.controlPoint_2 = ccp(location.x-CONTROL_POINT2_X, CONTROL_POINT2_Y);
  bezier.endPosition = ccp(location.x-CONTROL_POINT1_X,distance);

  // Motion along bezier curve and finally call a function
  [projectile runAction:[CCSequence actions:
                           [CCAutoBezier actionWithDuration:DEFAULT_ACTION_DURATION bezier:bezier],
                           [CCCallFuncN actionWithTarget:self selector:@selector(collisionCheck:)], nil]];
3 голосов
/ 26 марта 2012

Просто масштабируйте изображение спрайта, чтобы оно уменьшалось по мере удаления.

1 голос
/ 16 октября 2012

Эй, вы можете использовать bezier curve для 3d вида в перспективе cocos2d.

bezier.controlPoint_1 = ccp(location.x-CONTROL_POINT1_X, CONTROL_POINT1_Y);
  bezier.controlPoint_2 = ccp(location.x-CONTROL_POINT2_X, CONTROL_POINT2_Y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...