2013-11-12 1 views
2

Я хочу отображать фигуры с динамическим положением.Форма узла тела с динамическим положением

Пр ..

 A  B  C  D 
    D  A  B  E 
    E  B  D  A 

Здесь кодирование:

string names[] = { 
"AB", 
"ABC", 
"ABCZ", 
"ABCDEDF", 

};

void HelloWorld::addShapes(HelloWorld* game) 
{ 
name = names[arc4random()%4]; 
...... 

..... 

CCPoint pos1[8]; 
for (int i = 0; i< TempNumOne; i++) 
{ 
    pos1[i]=CCPoint(disx, disy); 
} 


for (int a=0; a<TempNumOne; a++) 
{ 
    Filename[a]=FileMeasure[a]; 
    int temp= arc4random()%TempNumOne; 
    ...... 
    bodyDef.position.Set(pos1[temp].x/32.0f, pos1[temp].y/32.0f); 
    ..... 

    switch (Filename[a]) 
    { 
     case 'A': 
     { 
      ...... 
     } 
     case 'B': 
     { 
      ...... 
     } 
     etc..... 
    } 

Вся эта логика работает отлично, за исключением динамического положения.

Иногда функция arc4random возвращает те же значения в инструкции цикла. У меня одинаковое положение для двух форм.

Я хочу отображать фигуры различного положения.

Может ли кто-нибудь мне помочь?

+0

Зачем вам нужен указатель на игру? Это не одно и то же? Также попробуйте не использовать код повторно, как в вашем коммутаторе. Lines "game-> addBodyNode (nodehead, 1); nodehead-> retain()" вы должны перейти к следующему переключателю. Это плохая привычка программирования, потому что ваш код длиннее и труднее читать. Это не решает вашу проблему, но делает ваш код чистым и читаемым. –

+0

@WezSieTato: Я отметил вашу точку зрения. Спасибо – Vanarajan

ответ

1

Вы не можете использовать случайный способ. Он может возвращать одинаковые значения (так работает случайный). Что вам нужно - random_shuffle

std::string[] names = {"A", "B", "C"}; 
std::random_shuffle(std::begin(names), std::end(names)); 
//now names are in random order. just iterate over them. 
+0

большое спасибо. «Std :: random_shuffle (pos1, pos1 + count)» - это поддержка синтаксиса в случайном порядке C++. – Vanarajan

+0

@Vanarajan: это не объективный синтаксис C++. 'std :: begin/end' возвращают контейнеры, специфичные итераторы, которые являются просто указателями в случае массива. Вот почему ваша версия работает – Andrew

0

Если вам нужны уникальные случайные числа, вам необходимо его реализовать ... Вы можете запомнить все предыдущие номера и проверить, является ли следующее число уникальным, но его недетерминированный алгоритм. Или используйте лучший алгоритм, такой как алгоритм Кнута-Фишера-Йейта: Unique (non-repeating) random numbers in O(1)?

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