Author Topic: Kanonenkugel direction berechnen  (Read 1286 times)

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Kanonenkugel direction berechnen
« on: 2010-Mar-17 »
Hi Leute!

Ich habs irgendwie immernoch nicht ganz begriffen, wie ich Winkel berechne  :x
Kann mir wer helfen und mir zuersteinmal sagen, wie ich den Ausgangswinkel relativ zum Kanonenrohr berechne?

Code: GLBasic [Select]
// --------------------------------- //
// Project: cannon
// Start: Wednesday, March 17, 2010
// IDE Version: 7.082

        TYPE Tcannon
                x
                y
                power
                phi
                isAlive
                shoot
        ENDTYPE
       
        TYPE Tbowl
                x
                y
                dir_x
                dir_y
        ENDTYPE


        SETCURRENTDIR("Media") // seperate media and binaries?
       
        //GFX
        LOADSPRITE "cannon.png", 0 //cannon-foot
        LOADSPRITE "cannon1.png", 1 //cannon
        LOADSPRITE "bowl.png", 2 //cannon bowl
       
        //GLOBALS
        GLOBAL scr_x, scr_y
        GETSCREENSIZE scr_x, scr_y //get the screensize into scr_x and scr_y
       
        GLOBAL cannon AS Tcannon //Create a newcannonn
        GLOBAL newBowl AS Tbowl
        GLOBAL bowls[] AS Tbowl
       
        //Set the cannon properties
        cannon.x = scr_x/2-64
        cannon.y = scr_y-38
        cannon.power = 1
        cannon.phi = 0
        cannon.isAlive = TRUE
       
        //CONSTANTS
        GLOBAL LEFT% = 203
        GLOBAL RIGHT% = 205
        GLOBAL SPACE% = 57
       
WHILE TRUE //main loop

        DRAWRECT 0,0,scr_x,scr_y,RGB(200,200,255)
       
        //For each shot do this
        FOREACH Shot IN bowls[]
                INC Shot.x, Shot.dir_x
                INC Shot.y, Shot.dir_y         
               
                DRAWSPRITE 2,Shot.x,Shot.y //Draw the cannon ball
        NEXT
       
        IF cannon.isAlive = TRUE
                IF KEY(LEFT%) //turn left
                        IF cannon.phi<180
                                INC cannon.phi, 2
                        ENDIF
                ENDIF

                IF KEY(RIGHT%) //turn right
                        IF cannon.phi>0
                                DEC cannon.phi, 2
                        ENDIF
                ENDIF
               
                IF KEY(SPACE%) //shoot
                        IF cannon.shoot
                       
                        //create a new shot
                        newBowl.x = cannon.x + 80
                        newBowl.y = cannon.y + 16
                        newBowl.dir_x = SIN(cannon.phi)                  //??????????????????????????
                        newBowl.dir_y = COS(cannon.phi)      //??????????????????????????
                       
                        DIMPUSH bowls[], newBowl
                       
                        cannon.shoot = FALSE //only one shot per press
                        ENDIF
                ELSE
                        cannon.shoot = TRUE //if space = unpressed then shoot = true
                ENDIF
       
                ROTOSPRITE 1, cannon.x, cannon.y, cannon.phi //Draw the cannon
                DRAWSPRITE 0,scr_x/2-16,scr_y-32 //Draw the cannon-foot
        ENDIF

SHOWSCREEN //Draw the screen
WEND //aaaaaand again
 

Danke im Voraus!   :booze:

Offline Schnatterplatsch

  • Mc. Print
  • *
  • Posts: 41
    • View Profile
Re: Kanonenkugel direction berechnen
« Reply #1 on: 2010-Mar-17 »
Hab grade keine Zeit mir den Code anzuschauen, aber nur für den Fall, dass du die Richtung von Punkt 1 zu Punkt 2 brauchst:

Quote
FUNCTION Get_Angle: x1 , y1 , x2 , y2   

   RETURN  ATAN(-(y2 - y1) , x2 - x1)

ENDFUNCTION


EDIT:  Das scheints zu sein, oder?
« Last Edit: 2010-Mar-17 by Schnatterplatsch »

Offline S. P. Gardebiter

  • Mr. Polyvector
  • ***
  • Posts: 245
    • View Profile
    • Tile 44 Interactive
Re: Kanonenkugel direction berechnen
« Reply #2 on: 2010-Mar-17 »
Falls du einen Winkel angeben willst und eine Geschwindigkeit und dafür eine X und Y Geschwindigkeit haben willst, kannst du folgenden Code benutzen:

Code: GLBasic [Select]
XSpeed = SIN(Angle + 90) * Speed
YSpeed = COS(Angle + 90) * Speed

0 Grad sind demnach wie auf einem Geodreieck etc. rechts und 90 Grad sind oben.

Danach benutzt du folgenden Code:

Code: GLBasic [Select]
INC X, XSpeed
INC Y, YSpeed

Falls für eine Bewegung von Punkt 1 zu Punkt 2 einen Winkel brauchst, ist das von meinem Vorposter der richtige Code.
« Last Edit: 2010-Mar-17 by S. P. Gardebiter »
~ Cave Story rules! ~

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Re: Kanonenkugel direction berechnen
« Reply #3 on: 2010-Mar-18 »
Ah ok... Das probier ich nachher mal aus!
Ich sollte vielleicht mal ein bisschen Geometrie nachholen  :good:

Danke schonmal  ;)