Discuss Scratch

mrspock59
Scratcher
50 posts

Aide sur un projet / Code

Bonjour les scratcheurs,
voila pour projet je n'arrive pas à faire un mouvement avec un lutin. Celui-ci est lorsque on clique avec la souris, le lutin au centre de l'écran dois sauter et avancé vers la droite (de préférence), puis redescendre car il y a de la gravité (en bas de l'écran). Si on reclique sur la souris, le même mouvement se reproduit jusqu’à ce que le bord soit atteint (il dois également rebondir de l'autre sens), et ainsi de suite..
J'ai essayer pas mal de trucs mais ce n'est jamais terrible ou il y a pleins de bugs!
Quelqu'un peut-il m'aider avec ce sous-projet spécialement créer pour http://scratch.mit.edu/projects/20896344/ ?

Merci !

Last edited by mrspock59 (April 17, 2014 17:18:20)

boisvert
Scratcher
13 posts

Aide sur un projet / Code

J'ai regarde ton projet. Comme je ne sais pas ce que tu as essaye je prends depuis le debut:

- pour deplacer un lutin, glisser marche plutot mal - il va aller 1 seconde d'un cote, 1 seconde de l'autre etc.

Il vaut mieux faire un tout petit mouvement que tu repetes souvent:

when green flag clicked
forever
move (...) steps
end

Ensuite tu utilises une variable, “vitesse”, dans la boucle, pour savoir s'il va vite ou lentement:
Le lutin va recommencer a avancer, avancer, a la vitesse que tu choisis.

when green flag clicked
set [vitesse v] to [0]
forever
move (vitesse) steps
end

Et la vitesse peut changer: 1 = en avant, 0 = sur place, -1 = en arriere… Et pour avancer plus vite, mets une vitesse de 2, 3, …

Avance:
when [up arrow v] key pressed
set [vitesse v] to [1]

Stop:
when [space v] key pressed
set [vitesse v] to [1]

Recule:
when [down arrow v] key pressed
set [vitesse v] to [-1]
mrspock59
Scratcher
50 posts

Aide sur un projet / Code

Merci, j'ai essayer ton aide et c'est quasiment ça!
J'ai donc fait ce que tu m'as conseillé, et j'ai ajouter "rebondir si le bord est atteint, mais le problème c'est que le lutin se retourne à l'envers une fois sur deux.
Il y a encore le mouvement du saut à effectuer..

Last edited by mrspock59 (April 20, 2014 10:20:15)

boisvert
Scratcher
13 posts

Aide sur un projet / Code

- si le lutin se retoune, il y un bloc mouvement pour ca:

set rotation style [ v]

- Le saut, c'est plus complique. Il y a deux facons de faire.

Ma preferee c'est la facon “cartesienne” (de Descartes, le mathematicien qui a invente les coordonnees). Tu fais deux varaibles, pour la vitesse x et la vitesse y. La vitesse x est pour la coordonnee X, la vitesse Y pour la coordonnee Y. Pour aller de gauche a droite - change X; pour aller de haut en bas, change Y. Pour sauter le plus realiste est de faire evoluer Y regulierement, d'abord en montant tres vite, puis moins vite, puis en retombant. La vitesse Y fait don une serie: 0 (normal), puis 5 (on saute), et puis 4, 3, 2, 1, 0 (en haut du saut), -1 (on tombe), -2, -3, -4, -5. Tu peux creer un script qui calcule le mouvement:
when [up arrow v] key pressed
set [vitesse Y v] to 5
repeat (11)
wait (0.1) secs
change [vitesse Y v] by (-1)
end
set [vitesse Y v] to 0

Il faut ajuster les temps d'attente, et n'oublie pas d'adapter la boucle qui change la position du lutin pour utiliser les deux vitesses.

Mais le probleme de la methode cartesienne c'est que tu perds l'usage de la “direction”, et donc tu perds le rebond. On peut s'arranger - avec if, et une operation, tu peux inverser la vitesse X ou la vitesse Y pour rebondir. Mais si tu veux garder la direction, alors suis la methode 2.

Methode 2: les angles. Au lieu de controler le saut par la vitesse, tu le controles par la direction. Donc, pas de vitesses X et Y, une seule suffit. Quand le lutin saute, il monte:

turn left (60) degrees

Puis il retombe:
when [up arrow v] key pressed
turn left (60) degrees
repeat (11)
wait (0.1) secs
turn right (10) degrees
end
point in direction (0 v)

C'est plus difficile de faire un saut realliste, mais plus facile si tu veux utiliser la direction.
mrspock59
Scratcher
50 posts

Aide sur un projet / Code

J'ai trouver et mis le bloc pour la rotation, c'est ok.. mais sinon pour le saut c'est plus dur, j'ai essayer la deuxième méthode mais ça ne fonctionne pas (plein de bug, ça tourne dans tout les sens). Pour la première, j'aimerais bien essayer mais je ne trouve pas les blocs en rouge.
Merci encore!
boisvert
Scratcher
13 posts

Aide sur un projet / Code

Les blocs en rouge - ils devraient être orange, c'est moi qui les ait mal écrits:

set [Vitesse Y v] to [0]
mrspock59
Scratcher
50 posts

Aide sur un projet / Code

Ah dac! ça ne fonctionne pas
Melisssa2006
New to Scratch
1 post

Aide sur un projet / Code

comment on fait des bonus de vitesse?
Gasimini
Scratcher
100+ posts

Aide sur un projet / Code

Salut, pour ton projet, je ne suis pas allé le voir , mais j'ai peut-être une idée

Il te suffit de créer une variable
 (gravité) 
et un lutin nommé sol (une ligne qui représente ton sol)

Puis tu fais ces deux script pour ton lutin :

quand le drapeau vert pressé
mettre (gravité) à [0]
répéter indéfiniment
ajouter (gravité) à y
si <[sol] touché?> alors
mettre (gravité) à [0]
sinon
ajouter à (gravité) (-1)
end


quand [fléche haut] est cliqué
ajouter à (gravité) (15)
ajouter (5) à x

Voilà j'espère que ça t'aura aidé.
Pour limiter le nombre de scripts tu peux prendre le deuxième, l'insérer dans ce bloc
si <touche [flèche haut] pressée?> alors

end
puis tu insère le tout dans le répéter indéfiniment du premier script !


Pour te prouver que ça marche, j'ai utilisé ce système dans mon jeu Your text to link here… en ajoutant des blocs pour qu'il puisse sauter.

Last edited by Gasimini (March 7, 2018 14:20:23)


Gasimini
______________

< Co-owner of the Meow Shop - More than 100 posts on the forum - More than 150 followers - 1 featured project >
Gasimini
Scratcher
100+ posts

Aide sur un projet / Code

Si ça ne marche pas dis-moi !

Gasimini
______________

< Co-owner of the Meow Shop - More than 100 posts on the forum - More than 150 followers - 1 featured project >

Powered by DjangoBB

Standard | Mobile