Problem mit Kugel-Realität

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Problem mit Kugel-Realität

BeitragSa, Jan 27, 2007 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
AppTitle "KugelFall"

Dim Rad(8)

Kugel  = LoadImage("GFX\Kugel.png")
MaskImage Kugel ,255,0,255
MidHandle Kugel



For x = 1 To 8
Rad(x) = LoadImage("GFX\Rad1.bmp")
SetBuffer ImageBuffer(Rad(x))
MaskImage Rad(x),255,0,255
RotateImage Rad(x),x*45
MidHandle Rad(x)
Next

R1 = 1

SetBuffer BackBuffer()
alt = MilliSecs()
Repeat
mx = MouseX()
my = MouseY()

y = y + 5

DrawImage Kugel,100,y

If ImageRectCollide(Rad(R1),100,100,0,mx,my,1,1) Then
If alt <= MilliSecs() - 500
R1 = R1 + 1
If R1 > 8 Then R1 = 1
alt = MilliSecs()
EndIf
EndIf

DrawImage Rad(R1),100,100

If ImagesCollide(Kugel,100,y,0,Rad(R1),100,100,0) Then
y = OY
EndIf
Flip
Cls
OY = y
Until KeyHit(1)
End


Ich will das die Kugel, wenn man das Rad dreht,sich in der Mulde mitdreht.
Wie geht das ?
Ich hab's schon die ganze Zeit versucht mit ner X Koordinate, hab ich aber nich hin gekrigt.
Könnt ihr mir helfen?
Dankee im vooraus.
mfg
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Rone

BeitragSa, Jan 27, 2007 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
moin,
weiß nicht ob ich dein Problem richtig verstanden habe, aber ich denke das wird dir weiterhelfen...ist leider ein bisschen viel weil die Bilder erstmal erstellt werden...

Das wichtigste ist:
DrawImage Ball, RadXpos+distance*Sin(rotation),RadYpos-distance*Cos(rotation)
DrawImage img ,RadXpos , RadYpos ,rotation

...damit sich der Ball mit dem Rad mitdreht.

Code: [AUSKLAPPEN]
Graphics 640,480,16,2

;------------------------------
;Rad erstellen
Rad=CreateImage(64,64)
SetBuffer ImageBuffer(Rad)
Color 0,0,222
Oval 0,0,64,64
Color 0,0,0
Rect 20,0,24,12
Oval 20,0,24,24

;Bild rotieren
zeilen = 19
spalten =19
frames = zeilen *spalten
img= Rotate(Rad,zeilen,spalten)
MidHandle img
;------------------------------
;Ball erstellen
Ball=CreateImage(24,24)
SetBuffer ImageBuffer(Ball)
Color 0,255,0
Oval 0,0,24,24
MidHandle Ball
;------------------------------
;Hauptprogramm

SetBuffer BackBuffer()
Color 255,0,0

RadXpos = 320
RadYpos = 240
distance = 22

While Not KeyHit(1)=1
      Cls

   rotation = ( rotation + 362 ) Mod 360
   ;distance = 52 + Sin(rotation*2)*32

   DrawImage Ball, RadXpos+distance*Sin(rotation),RadYpos-distance*Cos(rotation)
    DrawImage img ,RadXpos , RadYpos ,rotation

    Flip
Wend
End
;------------------------------
Function Rotate(grund,zeilen,spalten,Datei$="temp.bmp")
   size = ( ImageWidth(grund)^2 +ImageHeight(grund)^2 )^0.5
   HandleImage(grund,ImageWidth(grund)/2 ,ImageHeight(grund)/2)
   neu2=CreateImage(size*spalten,size*zeilen)
   TFormFilter 0
   SetBuffer ImageBuffer(neu2)
   For ty=0 To zeilen-1
      For tx=0 To spalten-1
         bild=CopyImage(grund)
         RotateImage bild,Float(tx+spalten*ty)*(360.0/(spalten*zeilen))
         DrawImage bild,size/2+tx*size,(size/2)+size*ty
         FreeImage bild
      Next
   Next
   SaveBuffer (ImageBuffer(neu2),Datei$)   
   Return (LoadAnimImage(Datei$,size,size,0,spalten*zeilen))
End Function

Function  Angle(fX1#, fY1#, fX2#, fY2#)
        Return (ATan2(fY2 - fY1, fX2 - fX1) + 450.0) Mod 360.0
End Function

the FR3AK

BeitragSa, Jan 27, 2007 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht gut aus^^
Aber ich glaub er will so n Murmelspiel nachbasteln Wink

ToeB

BeitragSa, Jan 27, 2007 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will so ein spiel machen wo man räder drehen muss, um die Kugel ins Ziel zu befördern.

~EDIT~
Neuer Code: [AUSKLAPPEN]

Graphics 800,600,16,2
AppTitle "KugelFall"
Dim Rad(7)

Dim K(5)

For i = 1 To 5
K(i)  = LoadImage("GFX\Kugel.png")
MaskImage K(i) ,255,0,255
MidHandle K(i)
Next

TFormFilter 0


For i = 0 To 7
Rad(i) = LoadImage("GFX\Rad1.bmp")
SetBuffer ImageBuffer(Rad(i))
MaskImage Rad(i),255,0,255
RotateImage Rad(i), i*45
MidHandle Rad(i)
Next

Global R1 = 0
Global y
Global x = 100

SetBuffer BackBuffer()

alt = MilliSecs()

Repeat
mx = MouseX()
my = MouseY()

fy = fy + 1
y = y + fy

If MouseDown(1)
  If ImageRectCollide(Rad(R1),100,100,0,mx,my,1,1) Then
    If alt <= MilliSecs() - 500
      R1 = R1 + 1
        If R1 > 7 Then
          R1 = 0
        EndIf
      alt = MilliSecs()
    EndIf
  EndIf
EndIf

DrawImage K(1),x,y
DrawImage Rad(R1),100,100
w# = ATan(R1)

If ImagesCollide(K(1),x,y,0,Rad(R1),100,100,0) Then
fy = 0
x = x+Sin(w#)*5
y = y+Cos(w#)*5
y = OY
EndIf

Flip
Cls

OY = y

Until KeyHit(1)

End

immer wenn ich drehe dann fällt es raus...aber nicht richtig !
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

5k41

BeitragSo, Jan 28, 2007 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Dafür solltest du dir glaub ich am besten eine kleine Physik-Engine schreiben, prinzip: Der Körper wird jeden Schleifendurchlauf, solange keine Kollision besteht nach unten bewegt, nun kann man dann Kräfte von 2 Achsen wirken lassen, die je nach trägheit des Gegenstandes oder von anderen Gegenständen verlangsamt/gestoppt werden. Ist zwar etwas komplex und bestimmt nicht wenig Code, aber wenn du das zu ner kleinen echten Physikengine ausbaust, dann kannst dus ja nicht nur dafür verwenden!

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

ToeB

BeitragSo, Jan 28, 2007 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
AppTitle "KugelFall"
Dim Rad(7)

Dim K(5)

For i = 1 To 5
K(i)  = LoadImage("GFX\Kugel.png")
MaskImage K(i) ,255,0,255
MidHandle K(i)
Next

TFormFilter 0


For i = 0 To 7
Rad(i) = LoadImage("GFX\Rad1.bmp")
SetBuffer ImageBuffer(Rad(i))
MaskImage Rad(i),255,0,255
RotateImage Rad(i), i*45
MidHandle Rad(i)
Next

Global R1 = 0
Global y
Global x = 100
Global RX = 100
Global RY = 100
Global fy#
Global d = 22
SetBuffer BackBuffer()

alt = MilliSecs()

Global Fall = True

Repeat
mx = MouseX()
my = MouseY()

If Fall = True
fy = fy + 0.5
y = y + fy
EndIf

If MouseHit(1)
  If ImageRectCollide(Rad(R1),RX,RY,0,mx,my,1,1) Then
    ;If alt <= MilliSecs() - 200
       RO = True
      R1 = R1 + 1
        If R1 > 7 Then
          R1 = 0
        EndIf
      alt = MilliSecs()
     ;EndIf
   EndIf
Else
RO = False
EndIf
If RO = True Then
r = (r + (R1*45)) Mod 360
EndIf

If ImagesCollide(K(1),x,y,0,Rad(R1),RX,RY,0) Then
y = OY
x = OX
fy = 0
DrawImage K(1),RX+d*Sin(r),RY-d*Cos(r)
Else
DrawImage K(1),x,y
EndIf

DrawImage Rad(R1),RX,RY




Flip
Cls

OY = y
OX = x

Until KeyHit(1)

End


Also soweit funzt et ja, aber nur bei der ersten drehung. danach verliert es sich wieda...

~Edit~
oh... Embarassed Fehler gefunden.
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
AppTitle "KugelFall"
Dim Rad(7)

Dim K(5)

For i = 1 To 5
K(i)  = LoadImage("GFX\Kugel.png")
MaskImage K(i) ,255,0,255
MidHandle K(i)
Next

TFormFilter 0


For i = 0 To 7
Rad(i) = LoadImage("GFX\Rad1.bmp")
SetBuffer ImageBuffer(Rad(i))
MaskImage Rad(i),255,0,255
RotateImage Rad(i), i*45
MidHandle Rad(i)
Next

Global R1 = 0
Global y
Global x = 100
Global RX = 100
Global RY = 100
Global fy#
Global d = 22
SetBuffer BackBuffer()

alt = MilliSecs()

Global Fall = True
 

Repeat
mx = MouseX()
my = MouseY()

If Fall = True
fy = fy + 0.5
y = y + fy
EndIf

If MouseHit(1)
  If ImageRectCollide(Rad(R1),RX,RY,0,mx,my,1,1) Then
    ;If alt <= MilliSecs() - 200
       RO = True
      R1 = R1 + 1
        If R1 > 7 Then
          R1 = 0
        EndIf
      alt = MilliSecs()
     ;EndIf
   EndIf
Else
RO = False
EndIf
If RO = True Then
r = (r + (R1+42)) Mod 360 ; <<<<<<<<<<Hier
EndIf


If ImagesCollide(K(1),x,y,0,Rad(R1),RX,RY,0) Then
y = OY
x = OX
fy = 0
DrawImage K(1),RX+d*Sin(r),RY-d*Cos(r)
Else
DrawImage K(1),x,y
EndIf


DrawImage Rad(R1),RX,RY




Flip
Cls

OY = y
OX = x

Until KeyHit(1)

End

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group