Sprite Candy - Robotersimulation, Probleme mit HUD_SetOrigin

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Sprite Candy - Robotersimulation, Probleme mit HUD_SetOrigin

BeitragFr, Jan 04, 2008 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute!

Ich weiss jetzt nicht wie viele von euch Sprite Candy haben, oder wieviele sich damit auskennen, aber ich stelle die frage trotzem mal Wink


Ich bin dabei eine kleine Roboter simulation zu schreiben, welche später mit der entsprechenden Hardware ergänzt werden soll. Der Roboter hat zwei räder und bewegt/dreht sich wie ein Panzer. Im folgenden code stellt das rote Rechteck den Roboter dar. durch drücken der Taste "1" (Numpad) soll sich das linke Rad drehen und durch drücken der Taste "3" (Numpad) das rechte.

Jetzt habe ich aber probleme mit dem Befehl HUD_SetObjectOrigin, da der Roboter immer umher springt, anstelle dass er sich fortbewegt wenn sich beide Räder drehen ("1" und "3" gedrückt)

was mache ich da falsch?




Code: [AUSKLAPPEN]

AufloesungX = 640
AufloesungY = 480

; Roboter Angaben:
RadDurchmesser# = 120
AnzahlImpulseProRadUmdrehung = 10
RadAbstand# = 300
RadUmfang# = RadDurchmesser# * Pi
WegProImpuls# = RadUmfang# / AnzahlImpulseProRadUmdrehung
WinkelProImpuls# = WegProImpuls# / (RadAbstand#) ;Winkel = Bogenmass / Radius

PixelMillimeterFaktor# = 10000


Graphics3D AufloesungX, AufloesungY, 0, 2 : SetBuffer BackBuffer()
KartenAusschnittGroesseX = 21
KartenAusschnittGroesseY = 15
KartenGroesseX = 100
KartenGroesseY = 75
Const RasterGroesse = 20


; INCLUDE SPRITE CANDY
Include "E:/Sprite Candy 1.0.12/sprite candy.bb"

; CREATE CAMERA, LIGHT, BACKGROUND
Cam = CreateCamera()


; CREATE THE HUD
HUD%   = HUD_Create (Cam)



; CREATE LAYER
MapLayer% = HUD_CreateLayer(HUD)
RahmenLayer% = HUD_CreateLayer(HUD)





RoboX = 100
RoboY = 100

Dim Quadrat(KartenAusschnittGroesseX,KartenAusschnittGroesseY)
Dim Map(KartenGroesseX,KartenGroesseY)



; CREATE SHAPES (HUD, TYPE, PARAM1,PARAM2, X,Y, WIDTH,HEIGHT, X-ALIGN,Y-ALIGN)
BalkenRechts = HUD_CreateShape (RahmenLayer,"RECTANGLE" ,1,0,(KartenAusschnittGroesseX+1)*RasterGroesse-RasterGroesse, 0, AufloesungX-((KartenAusschnittGroesseX+1)*RasterGroesse-RasterGroesse),AufloesungY,"","") ; FILLED
HUD_SetObjectOrigin(BalkenRechts,-1,-1)
HUD_SetObjectColor (BalkenRechts, 200,200,200)
BalkenLinks = HUD_CreateShape (RahmenLayer,"RECTANGLE" ,1,0, 0, 0, RasterGroesse-2,AufloesungY,"","") ; FILLED
HUD_SetObjectOrigin(BalkenLinks,-1,-1)
HUD_SetObjectColor (BalkenLinks, 200,200,200)
BalkenUnten = HUD_CreateShape (RahmenLayer,"RECTANGLE" ,1,0,0, (KartenAusschnittGroesseY+1)*RasterGroesse-RasterGroesse,AufloesungX,AufloesungY-((KartenAusschnittGroesseY+1)*RasterGroesse-RasterGroesse),"","") ; FILLED
HUD_SetObjectOrigin(BalkenUnten,-1,-1)
HUD_SetObjectColor (BalkenUnten, 200,200,200)
BalkenOben = HUD_CreateShape (RahmenLayer,"RECTANGLE" ,1,0, 0, 0, AufloesungX,RasterGroesse-2,"","") ; FILLED
HUD_SetObjectOrigin(BalkenOben,-1,-1)
HUD_SetObjectColor (BalkenOben, 200,200,200)

For X = RasterGroesse To RasterGroesse * KartenAusschnittGroesseX Step RasterGroesse
  For Y = RasterGroesse To RasterGroesse * KartenAusschnittGroesseY Step RasterGroesse
    Quadrat(X/RasterGroesse,Y/RasterGroesse) = HUD_CreateShape (MapLayer,"RECTANGLE" , 1,0, X, Y, RasterGroesse-1,RasterGroesse-1) ; FILLED
    HUD_SetObjectColor  Quadrat(X/RasterGroesse,Y/RasterGroesse), 255,255,255   
    HUD_SetObjectOrigin(Quadrat(X/RasterGroesse,Y/RasterGroesse),-1,-1)
  Next
Next


Roboter = HUD_CreateShape(RahmenLayer,"RECTANGLE" , 1,0, RoboX, RoboY, 20, 40)
HUD_SetObjectColor  Roboter, 200,50,50



; ------------------------------------------------------------------------
; MAIN LOOP
; ------------------------------------------------------------------------
While Not KeyDown(1)

    mx = MouseX()
    my = MouseY()
    If MouseDown(1) Then
      If RectsOverlap(mx,my,1,1,RasterGroesse,RasterGroesse,(KartenAusschnittGroesseX-1)*RasterGroesse,(KartenAusschnittGroesseY-1)*RasterGroesse) Then
        Map(Int(Mx/RasterGroesse)+ScrollBlockX,Int(My/RasterGroesse)+ScrollBlockY) = 1      
      End If
    EndIf
    If MouseDown(2) Then
      If RectsOverlap(mx,my,1,1,RasterGroesse,RasterGroesse,(KartenAusschnittGroesseX-1)*RasterGroesse,(KartenAusschnittGroesseY-1)*RasterGroesse) Then
        Map(Int(Mx/RasterGroesse)+ScrollBlockX,Int(My/RasterGroesse)+ScrollBlockY) = 0      
      End If
    EndIf
   
    For X = RasterGroesse To RasterGroesse * KartenAusschnittGroesseX Step RasterGroesse
      For Y = RasterGroesse To RasterGroesse * KartenAusschnittGroesseY Step RasterGroesse
        If Map(X/RasterGroesse+ScrollBlockX,Y/RasterGroesse+ScrollBlockY) = 1 Then HUD_SetObjectColor  Quadrat(X/RasterGroesse,Y/RasterGroesse), 100,100,100 Else HUD_SetObjectColor  Quadrat(X/RasterGroesse,Y/RasterGroesse), 200,200,255     
      Next
    Next
   
    If KeyDown(205) And ScrollBlockX < KartenGroesseX - KartenAusschnittGroesseX Then ScrollBlockX = ScrollBlockX + 1
    If KeyDown(203) And ScrollBlockX > 0 Then ScrollBlockX = ScrollBlockX - 1
    If KeyDown(208) And ScrollBlockY < KartenGroesseY - KartenAusschnittGroesseY Then ScrollBlockY = ScrollBlockY + 1
    If KeyDown(200) And ScrollBlockY > 0 Then ScrollBlockY = ScrollBlockY - 1
   
   If KeyHit(17) Then wire% = Not wire% : WireFrame wire
   
   
   
     
    ;Impuls linkes Rad
    If KeyDown(79) Then
      HUD_SetObjectOrigin(Roboter,-1,0)     
      HUD_TurnObject(Roboter,-WinkelProImpuls#)
    EndIf
   
    ;Impuls rechtes Rad
    If KeyDown(81) Then
      HUD_SetObjectOrigin(Roboter,1,0)
      HUD_TurnObject(Roboter,WinkelProImpuls#)
    EndIf
   
   HUD_Update()
   RenderWorld
    Flip 0
      
Wend

End

 

Dreamora

BeitragFr, Jan 04, 2008 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist SetOrigin nicht dazu da zu sagen wo rotationspunkt bzw. 0,0 punkt des bildes ist. Das ist nicht dazu da um das bild zu bewegen ...

Ausser da wurden die funktionsbenamsungen sehr anti-intuitive genommen was ich bei XPressive schwer bezweifel.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Iguan

BeitragFr, Jan 04, 2008 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm.. ok, und wie könnte ich das denn sonst bewerkstelligen??

MfG

Iguan
 

Dreamora

BeitragFr, Jan 04, 2008 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
HUD_PositionObject gemäss doku
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group