SneakyJoystick - движение по определенным точкам / плиткам - PullRequest
0 голосов
/ 26 ноября 2011

У меня SneakyJoystick запущен и работает, но я хочу перемещать свою плитку спрайта по плитке с определенной частотой ... Я довольно новичок в программировании для iphone и cocos2d, поэтому я точно не знаю, как работает вся эта штука SneakyJoystick. Я получил код из книги и снова: я просто хочу, чтобы мой Sprite двигался, как в игре «Покемон плитка» по плитке ...

-(void)initJoystickAndButtons {
    CGSize screenSize = [CCDirector sharedDirector].winSize;
    CGRect joystickBaseDimensions =
    CGRectMake(0, 0, 128.0f, 128.0f);
    CGRect jumpButtonDimensions =
    CGRectMake(0, 0, 64.0f, 64.0f);
    CGRect attackButtonDimensions =
    CGRectMake(0, 0, 64.0f, 64.0f);
    CGPoint joystickBasePosition;
    CGPoint jumpButtonPosition;
    CGPoint attackButtonPosition;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        // The device is an iPad running iPhone 3.2 or later.
        CCLOG(@"Positioning Joystick and Buttons for iPad");
        joystickBasePosition = ccp(screenSize.width*0.0625f,screenSize.height*0.052f);
        jumpButtonPosition = ccp(screenSize.width*0.946f,screenSize.height*0.052f);
        attackButtonPosition = ccp(screenSize.width*0.947f,screenSize.height*0.169f);
    } else {
        // The device is an iPhone or iPod touch.
        CCLOG(@"Positioning Joystick and Buttons for iPhone");
        joystickBasePosition = ccp(screenSize.width*0.07f,
                                   screenSize.height*0.11f);
        jumpButtonPosition = ccp(screenSize.width*0.93f,
                                 screenSize.height*0.11f);
        attackButtonPosition = ccp(screenSize.width*0.93f,
                                   screenSize.height*0.35f);
    }

SneakyJoystickSkinnedBase *joystickBase = [[[SneakyJoystickSkinnedBase alloc] init] autorelease];
joystickBase.position = joystickBasePosition;
joystickBase.backgroundSprite =[CCSprite spriteWithFile:@"dpadDown.png"];
joystickBase.thumbSprite =[CCSprite spriteWithFile:@"joystickDown.png"];
joystickBase.joystick = [[SneakyJoystick alloc]initWithRect:joystickBaseDimensions];

leftJoystick = [joystickBase.joystick retain];
leftJoystick.isDPad = YES;
[self addChild:joystickBase];

SneakyButtonSkinnedBase *jumpButtonBase =[[[SneakyButtonSkinnedBase alloc] init] autorelease];
jumpButtonBase.position = jumpButtonPosition;
jumpButtonBase.defaultSprite =[CCSprite spriteWithFile:@"jumpUp.png"];
jumpButtonBase.activatedSprite =[CCSprite spriteWithFile:@"jumpDown.png"];
jumpButtonBase.pressSprite = [CCSprite spriteWithFile:@"jumpDown.png"];
jumpButtonBase.button = [[SneakyButton alloc]initWithRect:jumpButtonDimensions]; 
jumpButton = [jumpButtonBase.button retain];
jumpButton.isToggleable = NO;
[self addChild:jumpButtonBase];
SneakyButtonSkinnedBase *attackButtonBase =[[[SneakyButtonSkinnedBase alloc] init] autorelease];
attackButtonBase.position = attackButtonPosition;
attackButtonBase.defaultSprite = [CCSprite spriteWithFile:@"handUp.png"];
attackButtonBase.activatedSprite = [CCSprite spriteWithFile:@"handDown.png"];
attackButtonBase.pressSprite = [CCSprite spriteWithFile:@"handDown.png"];
attackButtonBase.button = [[SneakyButton alloc]initWithRect:attackButtonDimensions];
attackButton = [attackButtonBase.button retain];
attackButton.isToggleable = NO;
[self addChild:attackButtonBase];

> }

    > -(void)applyJoystick:(SneakyJoystick *)aJoystick toNode:(CCNode *)tempNode forTimeDelta:(float)deltaTime{
    >     CGPoint scaledVelocity = ccpMult(aJoystick.velocity, 44.0f); // 1
    >     CGPoint newPosition = ccp(tempNode.position.x + scaledVelocity.x * deltaTime,tempNode.position.y + scaledVelocity.y * deltaTime);
    >     [tempNode setPosition:newPosition];
    >     if (jumpButton.active == YES) {
    >         CCLOG(@"Jump button is pressed.");
    >         if (attackButton.active == YES) {
    >             CCLOG(@"Attack button is pressed.");
    >         } }
    >      }

> 

    > # pragma mark -
    > # pragma mark Update Method

> -(void) update:(ccTime)deltaTime {
>     [self applyJoystick:leftJoystick toNode:dude
>            forTimeDelta:deltaTime];
>      }

1 Ответ

0 голосов
/ 26 ноября 2011

Я сделал нечто подобное для моей игры. Есть много шагов и не может вдаваться в детали.

Сначала Вы должны знать, когда используется джойстик.

Секунда Вам необходимо определить направление джойстика. Для такой игры, как Pokemon, вам нужно только проверить направление вверх / вниз / вправо / влево. Можно получить доступ к градусам джойстика. Просто интерпретируйте градусы, например, «если градусы находятся в диапазоне от -45 до 45, это означает, что джойстик в основном направлен вправо» и т. Д.

Третий вам придется отсоединить джойстик от объекта вашего игрока. Этот урок где-то заставляет вас связать их обоих так, чтобы джойстик автоматически перемещал игрока. Вы должны отменить это.

Четвертый составляет расписание где-то на вашей сцене. Расписание будет интерпретировать направление джойстика (если оно используется) и будет выполнять действие CCMoveBy на игрока. Если джойстик направлен вправо и размер плитки карты равен 32, то параметр движения CCMoveBy будет равен (32,0). Помните, что не следует выполнять другое действие, если игрок уже его выполняет.

Есть много деталей и так много, что нужно отполировать. Лучше постарайтесь спросить каждую вещь отдельно, а не все в одном кадре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...