2015-02-27 3 views
0

J'essaie de créer un élément visuel (un type de barre de progression), dans un jeu de Sprite Kit, qui représente la «force» avec laquelle un objet est lancé. Donc, lorsque vous touchez l'écran, le compteur commence à accumuler. Si vous tenez trop longtemps, la barre & se réinitialise indéfiniment jusqu'à ce que l'utilisateur relâche son doigt de l'écran. Sur lequel la position correspondante de la force du compteur entraînera la distance à laquelle l'objet sera projeté. Les seuls éléments que je sais faire sont de travailler avec les touchesBegan, touchEnded. S'il vous plaît aider - ne trouve rien en ligne pour l'objectif-c & sprite kit sur ce sujet (également vérifié github).Barre de progression de l'objectif c dans le jeu de lutins

Répondre

1

Beaucoup de façons de faire quelque chose comme ça. Vous devez avoir deux choses clés. 1) Quelque chose de garder une trace de si l'utilisateur est en train de toucher ou non. 2) Quelque chose de garder une trace de combien de temps l'utilisateur continue le contact.

Pour savoir si l'utilisateur est réellement en contact, vous pouvez utiliser BOOL que vous définissez sur true dans la méthode touchesBegan.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    myBool = true;  
} 

Avec la méthode touchesEnded, vous définissez à nouveau BOOL une fois le contact terminé.

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    myBool = false; 

    // your throw the object code. 
    // strength based on myInt. 
    // do not forget to set the myInt back to 0. 
} 

Le deuxième problème consiste à garder une trace de la durée du contact. Il y a beaucoup de façons de le faire. L'un d'eux est d'utiliser la méthode de mise à jour.

-(void)update:(CFTimeInterval)currentTime { 
    if(myBool) { 
     myInt++; 
     // code for modifying the running meter bar 
     if(myInt > 600) { 
      // max time reached. reset the meter bar 
      myInt = 0; 
     } 
    } 
} 

J'ai utilisé 60 comme exemple. Rappelez-vous que SK fonctionne à 60 FPS par défaut, ce qui signifie 600 équivaut à 10 secondes. Ce qui précède est un code très générique et devrait vous servir d'introduction à ce qui peut être fait. Il n'y a par exemple aucune allocation pour d'autres touches en dehors de la fonction de lancer. Vous voudrez probablement utiliser un bouton de lancement à la place de tout l'écran. Le reste est à vous de comprendre.

+0

Pour un chronométrage plus précis, mémorisez l'heure à laquelle le contact a commencé et l'heure actuelle et utilisez-la pour trouver le temps écoulé (Cette méthode fonctionnera indépendamment des fréquences d'images) – Okapi

+0

@Okapi - Assez vrai, mais personnellement, je préfère utiliser un compteur d'images principalement parce que cela fonctionne bien avec la pause du jeu. L'utilisation du temps écoulé pose le problème du réglage du temps écoulé. – sangony

+0

Merci beaucoup pour ça! – Krekin