2010-09-06 2 views
1

Voici une image de ce que j'essaie de réaliser: http://bit.ly/cabifI Fondamentalement, je veux que le cercle bleu se déplace le long du chemin de la courbe d'avant en arrière lorsque j'appuie sur les touches fléchées droite et gauche.Comment est-ce que je blit l'image le long du chemin dans pygame?

Je sais que je dois noircir l'image mais existe-t-il un moyen de déterminer automatiquement les coordonnées x, y du chemin et d'y insérer l'image en appuyant sur les touches?

Ou y at-il un certain nombre d'algorithmes/techniques à utiliser?

Répondre

0

Je suppose que vous connaissez les coordonnées des chemins.

Étant donné un seul point le long du chemin, placez la balle sur le même x mais laissez y = y - ballRadius - (lineWidth/2).

Une approximation très simple; vous aurez probablement des intersections, surtout sur les pentes raides, mais cela pourrait faire l'affaire.

+0

C'est le problème. Je ne connais pas les coordonnées de chaque point du chemin. Y a-t-il un moyen d'automatiser cela? – Marconi

+0

Je vois, bien la voie évidente maintenant est de mettre à jour votre réponse avec comment le chemin est généré. Comment dessinez-vous une ligne qui pointe que vous ne connaissez pas? Utilisez-vous une bibliothèque? – Mizipzor

+0

pygame est la seule dépendance mais voici ce que j'ai fait: j'ai éditer l'image et dessiner tracer le chemin que je veux avec une ligne rouge puis dans pygame j'ai scanné les pixels de gauche à droite puis de haut en bas. chaque fois que je frappe un pixel rouge, j'enregistre ses coordonnées. – Marconi

1

une façon que vous pouvez obtenir les coordonnées est assez facilement ceci:

y = int(math.cos(x/70) * 30 + surface.get_height()/2) 

en supposant que vous utilisez une résolution de 640x480, il environ décrire votre chemin

une autre façon serait de faire un code pygame pour dessiner le chemin, et le stocker comme une liste que nous pouvons appeler 'chemin' par exemple. alors vous pouvez obtenir des coordonnées x y correspondant coordonnées en disant

path[x] 

le code que vous voulez pourrait ressembler à ceci:

path = list(0 for x in range(screen.get_width())) #make every y to 0 originally 

while not <exit condition>: 
    if pygame.mouse.get_pressed()[0]: #if lmb is pressed 
     mpos = pygame.mouse.get_pos() 
     x, y = mpos[0], mpos[1] #redundant, but for demonstrating 
     path[x] = y #so this will map y coordinates to x coordinates 

    draw_path(screen, path) #some function to draw you path, so its easier to make 

bien sûr theres quelques questions que vous devez répondre, comme si coordonnée n'a pas été mappé, il sera 0 et votre balle ne bougera pas très lisse

Vous pouvez générer la liste 'chemin' en utilisant cette fonction 'cos' aussi, comme cela;

path = [] 
for x in range(len(screen.get_width())): 
    y = int(math.cos(x/70) * 30 + surface.get_height()/2) 
    path.append(y) 

aussi comme mizipzor dit que vous aurez ne pas ajuster la balle il ressemble à son roulement sur le dessus de la courbe au lieu de travers elle

=)

Questions connexes