2013-01-31 3 views
0

У меня есть 20 спрайт в моей сцене, я устроил свой спрайт, как показано ниже.Как изменить положение спрайта на основе перемещения?

 o o o o o o o 

     o o o . o o o 

     o o o o o o o 

о -> мой мяч спрайт .--> мой пустой спрайт

, когда я двигаю 2-й спрайт в 2-м ряду с пустой спрайт, мой третий спрайт хочет удален и пустое пространство должно быть добавлен. Как мудрый я хочу переместить любой спрайт в пустое положение (горизонтальное перемещение, вертикальное перемещение, перемещение по диагонали), средний спрайт хочет удалить. Может ли кто-нибудь мне помочь в этом. Спасибо заранее.

+0

Покажите нам, что вы пробовали. Код был бы полезен. – bluestunt

+0

Мне нужна ваша идея, скажите, как я могу продолжить. Потому что я новичок в cocos2d. – iphoneguyzzz

ответ

0

Попробуйте это,

В .h объявить глобальные переменные спрайты,

CCSprite *movingBall; 

В ом, в первоначе

movingBall = nil; 

В touchesBegan,

if(!movingBall) 
{ 
    for(int i = 0; i<20; i++) 
    { 
    CCSprite *currentSprite = (CCSprite *)[self getChildByTag:i+tagOffset]; 

    if(CGRectIntersectsPoint([currentSprite boundingBox],touchPoint)) 
    { 
     // get moving sprite touched 

     if(movingBall.position.x == emptySprite.position.x+(2*xDistance) || movingBall.position.x == emptySprite.position.x-(2*xDistance) || movingBall.position.y == emptySprite.position.y+(2*yDistance) || movingBall.position.y == emptySprite.position.y -(2*yDistance)) 
     { 
      movingBall = (CCSPrite *)currentSprite; 
      Break; 
     } 
    } 
    } 
} 

В контактахMoved,

if(!movingBall) 
{ 
    return; 
} 


movingBall.position = touchedPoint; 

for(int i = 0; i<20; i++) 
{ 
    CCSprite *currentSprite = (CCSprite *)[self getChildByTag:i+tagOffset]; 

    if(CGRectIntersectsRect([movingBall boundingBox],[currentSprite boundingBox])) 
    { 
     // current sprite touched 
     if(currentSprite.tag == emptySprite.tag) 
     { 
     movingBall.position = emptySprite.position; 

     [self removeChild:currentSprite]; 
     Break; 
     } 

    } 
} 

В touchesEnded,

if(!movingBall) 
    { 
    return; 
    } 

    movingBall = nil; 
+0

Я хочу, чтобы это было сделано, когда мои TouchesMoved в TouchesEnd Revoming и добавление нового спрайта. Можете ли вы помочь мне с Elabrated code, пожалуйста. – iphoneguyzzz

+0

, что должно быть в xDistance (получение ошибки на этом) – iphoneguyzzz

+0

@iphoneguyzzz горизонтальное расстояние между двумя последовательными спрайтами. –

Смежные вопросы