cercle vide

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme

Message par Anonyme »

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 ?
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.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

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 ?
Certes, mais quand on débute( surtout avec pb)... faut commencer en douceur. :)
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

@Cpl.Bator
Si tu veut faire un rebond avec une droite , je te met au défi d'utiliser SpritePixelCol...()
...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).

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....
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

ouhou les copains !! :lol:

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 
:P 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? :lol:
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

chikun a écrit :ouhou les copains !! :lol:

un peu comme ça ....

:P 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? :lol:
non, c'est un joli code, tu peux même songer en faire un billard :)
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

@beauregard
8O 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 :lol: *

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 
Anonyme

Message par Anonyme »

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. :wink:
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

ahhh!!! merci :D
:)
mais!? :(

c'est de l'Hiéroglyphe non !? :?

je connais meme pas : "procedure..."

tainngg! c'est une bible la pure
bon hop! o boulot 8) ....travailler le week end , te jure...

merci mille fois, g l'impression d'etre un egyptien pationné qui viens de trouver un ipod....
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

ben non, je comprend pas ...

g donné des valeurs à x1, y1 et x2,y2 (considerant que ce sont les coordonnées des deux point dont tu parles)
et g fait debug angle = 0?

mais en fait je ne connais pas "procedure"
un chti exemple me viendrait en aide
Anonyme

Message par Anonyme »

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)
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

:D Cpl.Bator merci

voilà qui va grandement me servir des que j'ai du temps car mon patron m'a donné du boulot pour 4 :(

heureusement on est 8 :roll:

j'ai hate d'exploiter ton code...c tres sympa de prendre le temps d'aider
comme l'a fait Dobro :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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)
Répondre