Exactement , mais une fois les problèmes résolu , il faut faire cohabité nos résolution , et là , d'autres problème surgissent... deux problèmes résolu contradictoire l'un l'autre... pas façile , faut commencer par la base , les maths pur & dur , c'est pas le parcours que j'ai choisi , j'en "chie" un peu plus que les matheux , mais je m'en sors a chaque fois.Du reste, je pense que même si le flippers est plus complexe, ça reste un empilement de problèmes, qui pris un à un, ne sont pas plus diaboliques qu'un pong ou autres. ? Nop ?
cercle vide
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
@Cpl.Bator
je ne pense pas impossible meme à mon bas niveau.
et j'ajoute que j'ai choisi une sorte de flipper car c un exercice complet
pour moi..
mais j'ai fait de l'assembleur il y a 24a. j'étudie les cour ASM ici, j'en suis qu'à la comprehension des registres et des instructions mais j'irai voir s'il y a le B a BA (petits exemples concrets et appliqués avec affichage)
Pour ça si quelqu'un peut me donner un lien....
...disons que je voulais dans la création de la structure "barre" , ajouter une variable (indication) d'angle à prendre une fois percuté....et l'inverser si le choc se fesait en dessus ou en dessous de cette barre (par rapport à la coordonnée Y anterrieur de la balle).Si tu veut faire un rebond avec une droite , je te met au défi d'utiliser SpritePixelCol...()
je ne pense pas impossible meme à mon bas niveau.
et j'ajoute que j'ai choisi une sorte de flipper car c un exercice complet
pour moi..
mais j'ai fait de l'assembleur il y a 24a. j'étudie les cour ASM ici, j'en suis qu'à la comprehension des registres et des instructions mais j'irai voir s'il y a le B a BA (petits exemples concrets et appliqués avec affichage)
Pour ça si quelqu'un peut me donner un lien....
ouhou les copains !! 
un peu comme ça ....
accroche toi jeannot mdrrr, vous foutez pas svp dans les rangs
bon, je sais bien que c plus compliqué que ça si je veux un rendu reel , mais ne trichons nous pas des fois pour recentrer une balle ou autre hmm?

un peu comme ça ....
Code : Tout sélectionner
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024, 768, 32, "squelette ecran")
; 992,736
Structure objet
xb.w
yb.w
an.w
EndStructure
#balle=1
#target=2
Dim objet.objet(2)
CreateSprite ( #balle,32,32)
StartDrawing ( SpriteOutput (#balle))
Circle (16,16,16, RGB (0,0,255))
StopDrawing ()
CreateSprite ( #target,100,50)
StartDrawing ( SpriteOutput (#target))
LineXY(0,50,100,0,RGB(128,250,32))
StopDrawing ()
objet(#target)\xb=400 : objet(#target)\yb=300 : objet(#target)\an=320
ang=180 : st=1 : diam=600
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Repeat
StartDrawing(ScreenOutput())
DrawText(0,0,"Chikun",RGB(125,90,30),RGB(0,0,0))
DrawText(370,0,"clic droit > sortir ___/___ clic gauche > shooter",RGB(0,200,100), RGB(0,0,0))
DrawText(369,16,"(A) ang à gauche ___/___ (Z) ang à droite",RGB(0,200,100), RGB(0,0,0))
StopDrawing()
ExamineMouse()
mx=MouseX() : my=MouseY()
If mx>992 : mx=992 : EndIf
If my>736 : my=736 : EndIf
objet(#balle)\xb=mx : objet(#balle)\yb=my
StartDrawing(ScreenOutput())
Line(mx+16,my+16,px,py,RGB(255,0,0))
StopDrawing()
DisplayTransparentSprite(#balle,objet(#balle)\xb,objet(#balle)\yb)
DisplayTransparentSprite(#target,objet(#target)\xb,objet(#target)\yb)
FlipBuffers()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Q) : ang=ang-st : EndIf ;"A"
If KeyboardPushed(#PB_Key_W) : ang=ang+st : EndIf ;"Z"
px=diam*Cos(ang*#PI/180)
py=diam*Sin(ang*#PI/180)
ClearScreen(RGB(0, 0,0))
If MouseButton(1)
Repeat
objet(#balle)\xb=objet(#balle)\xb+16*Cos(ang*#PI/180)
objet(#balle)\yb=objet(#balle)\yb+16*Sin(ang*#PI/180)
DisplayTransparentSprite(#balle,objet(#balle)\xb,objet(#balle)\yb)
DisplayTransparentSprite(#target,objet(#target)\xb,objet(#target)\yb)
StartDrawing(ScreenOutput())
DrawText(0,0,"Chikun",RGB(125,90,30),RGB(0,0,0))
DrawText(370,0,"molette pour next lol!",RGB(0,200,100), RGB(0,0,0))
StopDrawing()
FlipBuffers()
If objet(#balle)\yb<0 : objet(#balle)\yb=0 : ang=-ang : EndIf
If objet(#balle)\yb>736 : objet(#balle)\yb=736 : ang=-ang : EndIf
If objet(#balle)\xb<0 : objet(#balle)\xb=0 : ang=270+(270-ang):EndIf
If objet(#balle)\xb>992 : objet(#balle)\xb=992 : ang=270+(270-ang): EndIf
If SpritePixelCollision(#balle,objet(#balle)\xb,objet(#balle)\yb,#target,objet(#target)\xb,objet(#target)\yb)
ang=270+(270+(ang+objet(#target)\an) ); << GROSSE RECHERCHE mdrr
EndIf
ClearScreen(RGB(0, 0,0))
ExamineMouse()
Until MouseButton(3)
EndIf
Until MouseButton(2)
End

bon, je sais bien que c plus compliqué que ça si je veux un rendu reel , mais ne trichons nous pas des fois pour recentrer une balle ou autre hmm?

-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
non, c'est un joli code, tu peux même songer en faire un billardchikun a écrit :ouhou les copains !!
un peu comme ça ....
accroche toi jeannot mdrrr, vous foutez pas svp dans les rangs
bon, je sais bien que c plus compliqué que ça si je veux un rendu reel , mais ne trichons nous pas des fois pour recentrer une balle ou autre hmm?

@beauregard
lolll merci.....enfin un peu d'encouragement, mais "ils" ont raison, ça va pas etre facile si je me plonge pas dans la trigo
puis toute façon, immagine dans un flipper avec une 10aine de "target", la quantité de "if" qui vont me retarder le prg (j'aimerai tant refaire de l'assembleur)
quoi que j'ai ajouté une seconde barre (regarde le code ci-dessous) et ça va encore.
(pardonnez moi les faux rebonds)
bon je vais faire un simulateur de f16 maintenant
*

puis toute façon, immagine dans un flipper avec une 10aine de "target", la quantité de "if" qui vont me retarder le prg (j'aimerai tant refaire de l'assembleur)
quoi que j'ai ajouté une seconde barre (regarde le code ci-dessous) et ça va encore.
(pardonnez moi les faux rebonds)
bon je vais faire un simulateur de f16 maintenant

Code : Tout sélectionner
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024, 768, 32, "squelette ecran")
; 992,736
Structure objet
xb.w
yb.w
an.w
EndStructure
#balle=1
#target=2
#champi=3
Dim objet.objet(3)
CreateSprite ( #balle,32,32)
StartDrawing ( SpriteOutput (#balle))
Circle (16,16,16, RGB (0,0,255))
StopDrawing ()
CreateSprite ( #target,100,50)
StartDrawing ( SpriteOutput (#target))
LineXY(0,50,100,0,RGB(128,250,32))
StopDrawing ()
objet(#target)\xb=400 : objet(#target)\yb=300 : objet(#target)\an=320
CreateSprite ( #champi,100,50)
StartDrawing ( SpriteOutput (#champi))
LineXY(0,0,100,50,RGB(160,200,62))
StopDrawing ()
objet(#champi)\xb=200 : objet(#champi)\yb=500 : objet(#champi)\an=45
ang=180 : st=1 : diam=600
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Repeat
StartDrawing(ScreenOutput())
DrawText(0,0,"Chikun",RGB(125,90,30),RGB(0,0,0))
DrawText(370,0,"clic droit > sortir ___/___ clic gauche > shooter",RGB(0,200,100), RGB(0,0,0))
DrawText(369,16,"(A) ang à gauche ___/___ (Z) ang à droite",RGB(0,200,100), RGB(0,0,0))
StopDrawing()
ExamineMouse()
mx=MouseX() : my=MouseY()
If mx>992 : mx=992 : EndIf
If my>736 : my=736 : EndIf
objet(#balle)\xb=mx : objet(#balle)\yb=my
StartDrawing(ScreenOutput())
Line(mx+16,my+16,px,py,RGB(255,0,0))
StopDrawing()
DisplayTransparentSprite(#balle,objet(#balle)\xb,objet(#balle)\yb)
DisplayTransparentSprite(#target,objet(#target)\xb,objet(#target)\yb)
DisplayTransparentSprite(#champi,objet(#champi)\xb,objet(#champi)\yb)
FlipBuffers()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Q) : ang=ang-st : EndIf ;"A"
If KeyboardPushed(#PB_Key_W) : ang=ang+st : EndIf ;"Z"
px=diam*Cos(ang*#PI/180)
py=diam*Sin(ang*#PI/180)
ClearScreen(RGB(0, 0,0))
If MouseButton(1)
Repeat
objet(#balle)\xb=objet(#balle)\xb+16*Cos(ang*#PI/180)
objet(#balle)\yb=objet(#balle)\yb+16*Sin(ang*#PI/180)
DisplayTransparentSprite(#balle,objet(#balle)\xb,objet(#balle)\yb)
DisplayTransparentSprite(#target,objet(#target)\xb,objet(#target)\yb)
DisplayTransparentSprite(#champi,objet(#champi)\xb,objet(#champi)\yb)
StartDrawing(ScreenOutput())
DrawText(0,0,"Chikun",RGB(125,90,30),RGB(0,0,0))
DrawText(370,0,"molette pour next lol!",RGB(0,200,100), RGB(0,0,0))
StopDrawing()
FlipBuffers()
If objet(#balle)\yb<0 : objet(#balle)\yb=0 : ang=-ang : EndIf
If objet(#balle)\yb>736 : objet(#balle)\yb=736 : ang=-ang : EndIf
If objet(#balle)\xb<0 : objet(#balle)\xb=0 : ang=270+(270-ang):EndIf
If objet(#balle)\xb>992 : objet(#balle)\xb=992 : ang=270+(270-ang): EndIf
If SpritePixelCollision(#balle,objet(#balle)\xb,objet(#balle)\yb,#target,objet(#target)\xb,objet(#target)\yb)
ang=270+(270+(ang+objet(#target)\an) ); << GROSSE RECHERCHE mdrr
EndIf
If SpritePixelCollision(#balle,objet(#balle)\xb,objet(#balle)\yb,#champi,objet(#champi)\xb,objet(#champi)\yb)
ang=270+(270+(ang+objet(#champi)\an) )
EndIf
;EndIf
ClearScreen(RGB(0, 0,0))
ExamineMouse()
Until MouseButton(3)
EndIf
Until MouseButton(2)
End
Code : Tout sélectionner
Procedure.f ReturnDegAngle(x1.f,y1.f,x2.f,y2.f) ; DEGREE
A.f = x1-x2
b.f = y1-y2
c.f = -Sqr(A*A+b*b)
Angle.f = ACos(A/c)*180/#PI
If y1 < y2 : Angle=360-Angle : EndIf
ProcedureReturn Abs(Angle - 360)
EndProcedure
Tiens , cette procedure te retourne l'angle qui sépare deux point , tu l'appliques sur ta droite ( lors du collision AABB par exemple ) Et tu rajoute 90 ( la normale de la droite ) tout en tenant compte de la direction de la balle , il te faut donc son angle aussi.

avec des structure en plus ! :d
Code : Tout sélectionner
Procedure.f ReturnDegAngle(x1.f,y1.f,x2.f,y2.f) ; DEGREE
A.f = x1-x2
b.f = y1-y2
c.f = -Sqr(A*A+b*b)
Angle.f = ACos(A/c)*180/#PI
If y1 < y2 : Angle=360-Angle : EndIf
ProcedureReturn Abs(Angle - 360)
EndProcedure
Structure Vector2
x.f
y.f
EndStructure
Structure Droite
A.Vector2
B.Vector2
EndStructure
; La droite AB
AB.Droite
; Le point A de la droite AB
AB\A\x = 100
AB\A\y = 100
; Le point B de la droite AB
AB\B\x = 300
AB\B\y = 300
; L'angle est de 45°
Debug ReturnDegAngle(AB\A\x,AB\A\y,AB\B\x,AB\B\y)
exemple simple d'appel de la procedure
Code : Tout sélectionner
Procedure.f ReturnDegAngle(x1.f,y1.f,x2.f,y2.f) ; DEGREE
a.f = x1-x2
b.f = y1-y2
c.f = -Sqr(a*a+b*b)
Angle.f = ACos(a/c)*180/#PI
If y1 < y2 : Angle=360-Angle : EndIf
ProcedureReturn Abs(Angle - 360)
EndProcedure
x1.f=10
y1.f=10
x2.f=150
y2.f=200
Debug ReturnDegAngle(x1.f,y1.f,x2.f,y2.f)
; ou alors
Result.f=ReturnDegAngle(10,10,150,200)
Debug Result.f
; ou alors
Debug ReturnDegAngle(10,10,150,200)