Einfallwinkel = Ausfallwinkel Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

BlitzBasic303

Betreff: Einfallwinkel = Ausfallwinkel Problem

BeitragDo, Okt 20, 2005 9:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Das Eigentliche berechnen funktioniert.
Bitte sagt nichts gegen den Code weil er ziemlich wüst ist.
Code: [AUSKLAPPEN]


Global x# = 50.0, y# = 500.0
Global angle# = 0
Global speed# = 0



hauptmenu()
Function hauptmenu()
Graphics 800,600,32,1
While Not KeyHit(1)
If KeyHit(79) Then levela()
If KeyHit(80) Then levelb()
If KeyHit(81) Then levelc()
Text 200,300,"Minigolf"
Text 200,350,"Drücke 1,2 oder 3 um eine Bahn zu wählen"
Flip
Wend
End

End Function





Function levela()
angle# = 0
speed# = 0
Graphics 800,600,32,1
boden = LoadImage("Gras.bmp")
mauerlinks = LoadImage("Mauer.bmp")
ScaleImage mauerlinks,1,8
mauerrechts = LoadImage("Mauer.bmp")
ScaleImage mauerrechts,1,8
maueroben = LoadImage("Mauer.bmp")
ScaleImage maueroben,1,13
RotateImage maueroben,90
mauerunten = LoadImage("Mauer.bmp")
ScaleImage mauerunten,1,13
RotateImage mauerunten,90
xziel = 50
yziel = 50
x# = 200
y# = 550

mauere = LoadImage("Mauer.bmp")
ScaleImage mauere,1,8
RotateImage mauere,-90
mauerz = LoadImage("Mauer.bmp")
ScaleImage mauerz,1,8
RotateImage mauerz,-90
mauerd = LoadImage("Mauer.bmp")
ScaleImage mauerd,1,8
RotateImage mauerd,-90

ball = LoadImage("ball.bmp")
ballz = LoadImage("ballz.bmp")

loch = LoadImage("Loch.bmp")
fahne = LoadImage("Fahne.bmp")
SeedRnd(MilliSecs())
wl = Rnd(1,3)

If wl = 1 Then
loopa = LoadSound("loopa.mp3")
LoopSound loopa
PlaySound loopa
End If
If wl = 2 Then
loopb = LoadSound("loopb.mp3")
LoopSound loopb
PlaySound loopb
End If
If wl = 3 Then
loopc = LoadSound("loopc.mp3")
LoopSound loopc
PlaySound loopc
End If

ms = LoadSound("Wand.wav")
drin = LoadSound("drin.wav")



SetBuffer BackBuffer()
While Not KeyHit(1)



DrawImage boden,0,0
DrawImage mauerlinks,0,0
DrawImage mauerrechts,787,0
DrawImage mauerunten,800,587
DrawImage maueroben,800,0
DrawImage mauere,0,150
DrawImage mauerd,0,450
DrawImage mauerz,200,300

    x# = x# + Cos( angle# ) * speed#
    y# = y# + Sin( angle# ) * speed#
    speed# = speed# - 0.02
    If speed# < 0 Then speed# = 0
    If speed# > 8 Then speed# = 8
    If speed# = 0 Then
xz# = x#+Cos(angle#)*50
yz# = y#+Sin(angle#)*50
DrawImage ballz,xz#,yz#
If KeyDown(57) Then tmp_speed#=tmp_speed#+0.2
If tmp_speed# > 8 Then tmp_speed# = 8
If (Not KeyDown(57)) And (tmp_speed#>0) Then
speed#=tmp_speed#
tmp_speed#=0
EndIf
End if
    If ImagesCollide(ball,x,y,0,maueroben,800,587,0) Or ImagesCollide(ball,x,y,0,mauerunten,800,0,0) Then   
        angle# = 360 - angle#   
   PlaySound ms
    EndIf
    If ImagesCollide(ball,x,y,0,mauere,0,150,0) Then   
        angle# = 360 - angle#   
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerz,200,300,0) Then   
        angle# = 360 - angle#   
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerd,0,450,0) Then   
        angle# = 360 - angle#   
   PlaySound ms
    EndIf


    If ImagesCollide(ball,x,y,0,loch,xziel,yziel,0) Then   
   PlaySound drin
   Delay 1500
   StopChannel loopbchannel
StopChannel loopachannel
    hauptmenu()
    EndIf
    If speed# = 0
    If Keydown(203) Then
      angle# = angle# - 1
      End if
    If Keydown(205) Then
      angle# = angle# + 1
    End If
    End if
    If ImagesCollide(ball,x,y,0,mauerlinks,0,0,0) Or ImagesCollide(ball,x,y,0,mauerrechts,787,0,0)       
    angle# = 180 - angle#   
   PlaySound ms
    EndIf

DrawImage loch,xziel,yziel
DrawImage ball,x#,y#
Color 255,0,0
Rect 10,10,tmp_speed#*50,10
Flip
Wend
If wl = 1 Then FreeSound loopa
If wl = 2 Then FreeSound loopb
If wl = 3 Then FreeSound loopc
hauptmenu()
End Function






























Function levelb()
angle# = 0
speed# = 0
Graphics 800,600,32,1
boden = LoadImage("Gras.bmp")
mauerlinks = LoadImage("Mauer.bmp")
ScaleImage mauerlinks,1,8
mauerrechts = LoadImage("Mauer.bmp")
ScaleImage mauerrechts,1,8
maueroben = LoadImage("Mauer.bmp")
ScaleImage maueroben,1,13
RotateImage maueroben,90
mauerunten = LoadImage("Mauer.bmp")
ScaleImage mauerunten,1,13
RotateImage mauerunten,90
xziel = 25
yziel = 50
x# = 750
y# = 300

mauere = LoadImage("Mauer.bmp")
ScaleImage mauere,1,7
RotateImage mauere,0
mauerz = LoadImage("Mauer.bmp")
ScaleImage mauerz,1,7
RotateImage mauerz,0
mauerd = LoadImage("Mauer.bmp")
ScaleImage mauerd,1,7
RotateImage mauerd,0
mauerv = LoadImage("Mauer.bmp")
ScaleImage mauerv,1,7
RotateImage mauerv,0
mauerf = LoadImage("Mauer.bmp")
ScaleImage mauerf,1,7
RotateImage mauerf,0



ball = LoadImage("ball.bmp")
ballz = LoadImage("ballz.bmp")

loch = LoadImage("Loch.bmp")
fahne = LoadImage("Fahne.bmp")

SeedRnd(MilliSecs())
wl = Rnd(1,3)

If wl = 1 Then
loopa = LoadSound("loopa.mp3")
LoopSound loopa
PlaySound loopa
End If
If wl = 2 Then
loopb = LoadSound("loopb.mp3")
LoopSound loopb
PlaySound loopb
End If
If wl = 3 Then
loopc = LoadSound("loopc.mp3")
LoopSound loopc
PlaySound loopc
End If
ms = LoadSound("Wand.wav")
drin = LoadSound("drin.wav")



SetBuffer BackBuffer()
While Not KeyHit(1)



DrawImage boden,0,0
DrawImage mauerlinks,0,0
DrawImage mauerrechts,787,0
DrawImage mauerunten,800,587
DrawImage maueroben,800,0
DrawImage mauere,100,0
DrawImage mauerd,400,0
DrawImage mauerz,250,100
DrawImage mauerv,550,100
DrawImage mauerf,700,0

    x# = x# + Cos( angle# ) * speed#
    y# = y# + Sin( angle# ) * speed#
    speed# = speed# - 0.02
    If speed# < 0 Then speed# = 0
    If speed# > 8 Then speed# = 8
    If speed# = 0 Then
xz# = x#+Cos(angle#)*50
yz# = y#+Sin(angle#)*50
DrawImage ballz,xz#,yz#
If KeyDown(57) Then tmp_speed#=tmp_speed#+0.2
If tmp_speed# > 8 Then tmp_speed# = 8
If (Not KeyDown(57)) And (tmp_speed#>0) Then
speed#=tmp_speed#
tmp_speed#=0
EndIf
End If
    If ImagesCollide(ball,x,y,0,maueroben,800,587,0) Or ImagesCollide(ball,x,y,0,mauerunten,800,0,0) Then   
        angle# = 360 - angle#   
   PlaySound ms
    EndIf
    If ImagesCollide(ball,x,y,0,mauere,100,0,0) Then   
        angle# = 180 - angle#     
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerz,250,100,0) Then   
        angle# = 180 - angle#
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerd,400,0,0) Then   
        angle# = 180 - angle# 
   PlaySound ms
    EndIf
    If ImagesCollide(ball,x,y,0,mauerv,550,100,0) Then   
        angle# = 180 - angle#
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerf,700,0,0) Then   
        angle# = 180 - angle# 
   PlaySound ms 
    EndIf

    If ImagesCollide(ball,x,y,0,loch,xziel,yziel,0) Then   
   PlaySound drin
   Delay 1500
   StopChannel loopbchannel
StopChannel loopachannel
    hauptmenu()
    EndIf
    If speed# = 0
    If KeyDown(203) Then
      angle# = angle# - 1
      End If
    If KeyDown(205) Then
      angle# = angle# + 1
    End If
    End If
    If ImagesCollide(ball,x,y,0,mauerlinks,0,0,0) Or ImagesCollide(ball,x,y,0,mauerrechts,787,0,0)       
    angle# = 180 - angle#   
   PlaySound ms
    EndIf


DrawImage loch,xziel,yziel
DrawImage ball,x#,y#
Color 255,0,0
Rect 10,10,tmp_speed#*50,10
Flip
Wend
If wl = 1 Then FreeSound loopa
If wl = 2 Then FreeSound loopb
If wl = 3 Then FreeSound loopc
hauptmenu()
End Function

















Function levelc()
angle# = 0
speed# = 0
Graphics 800,600,32,1
boden = LoadImage("Gras.bmp")
mauerlinks = LoadImage("Mauer.bmp")
ScaleImage mauerlinks,1,8
mauerrechts = LoadImage("Mauer.bmp")
ScaleImage mauerrechts,1,8
maueroben = LoadImage("Mauer.bmp")
ScaleImage maueroben,1,13
RotateImage maueroben,90
mauerunten = LoadImage("Mauer.bmp")
ScaleImage mauerunten,1,13
RotateImage mauerunten,90
xziel = 600
yziel = 50
x# = 50
y# = 500


mauere = LoadImage("Mauer.bmp")
ScaleImage mauere,1,4
RotateImage mauere,-90
mauerz = LoadImage("Mauer.bmp")
ScaleImage mauerz,1,5
RotateImage mauerz,0
mauerd = LoadImage("Mauer.bmp")
ScaleImage mauerd,1,4
RotateImage mauerd,0
mauerv = LoadImage("Mauer.bmp")
ScaleImage mauerv,1,8
RotateImage mauerv,-90


ball = LoadImage("ball.bmp")
ballz = LoadImage("ballz.bmp")

loch = LoadImage("Loch.bmp")
fahne = LoadImage("Fahne.bmp")

SeedRnd(MilliSecs())
wl = Rnd(1,3)

If wl = 1 Then
loopa = LoadSound("loopa.mp3")
LoopSound loopa
PlaySound loopa
End If
If wl = 2 Then
loopb = LoadSound("loopb.mp3")
LoopSound loopb
PlaySound loopb
End If
If wl = 3 Then
loopc = LoadSound("loopc.mp3")
LoopSound loopc
PlaySound loopc
End If

ms = LoadSound("Wand.wav")
drin = LoadSound("drin.wav")



SetBuffer BackBuffer()
While Not KeyHit(1)



DrawImage boden,0,0
DrawImage mauerlinks,0,0
DrawImage mauerrechts,787,0
DrawImage mauerunten,800,587
DrawImage maueroben,800,0
DrawImage mauere,0,100
DrawImage mauerd,500,-100
DrawImage mauerz,100,250
DrawImage mauerv,200,300


    x# = x# + Cos( angle# ) * speed#
    y# = y# + Sin( angle# ) * speed#
    speed# = speed# - 0.02
    If speed# < 0 Then speed# = 0
    If speed# > 8 Then speed# = 8
    If speed# = 0 Then
xz# = x#+Cos(angle#)*50
yz# = y#+Sin(angle#)*50
DrawImage ballz,xz#,yz#
If KeyDown(57) Then tmp_speed#=tmp_speed#+0.2
If tmp_speed# > 8 Then tmp_speed# = 8
If (Not KeyDown(57)) And (tmp_speed#>0) Then
speed#=tmp_speed#
tmp_speed#=0
EndIf
End If
    If ImagesCollide(ball,x,y,0,maueroben,800,587,0) Or ImagesCollide(ball,x,y,0,mauerunten,800,0,0) Then   
        angle# = 360 - angle#   
   PlaySound ms
    EndIf
    If ImagesCollide(ball,x,y,0,mauere,0,100,0) Then   
        angle# = 360 - angle# 
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerz,100,250,0) Then   
        angle# = 180 - angle# 
   PlaySound ms 
    EndIf
    If ImagesCollide(ball,x,y,0,mauerd,500,-100,0) Then   
        angle# = 180 - angle# 
   PlaySound ms
    EndIf
    If ImagesCollide(ball,x,y,0,mauerv,200,300,0) Then   
        angle# = 360 - angle# 
   PlaySound ms 
    EndIf

    If ImagesCollide(ball,x,y,0,loch,xziel,yziel,0) Then   
   PlaySound drin
   Delay 1500
   StopChannel loopbchannel
StopChannel loopachannel
    hauptmenu()
    EndIf
    If speed# = 0
    If KeyDown(203) Then
      angle# = angle# - 1
      End If
    If KeyDown(205) Then
      angle# = angle# + 1
    End If
    End If
    If ImagesCollide(ball,x,y,0,mauerlinks,0,0,0) Or ImagesCollide(ball,x,y,0,mauerrechts,787,0,0)       
        angle# = 180 - angle#   
   PlaySound ms
    EndIf


DrawImage loch,xziel,yziel
DrawImage ball,x#,y#
Color 255,0,0
Rect 10,10,tmp_speed#*50,10
Flip
Wend
If wl = 1 Then FreeSound loopa
If wl = 2 Then FreeSound loopb
If wl = 3 Then FreeSound loopc
hauptmenu()
End Function


So: Wenn der Ball im zweiten beispiel die rechte oder linke Seite der Mauern berührt, funktioniert es aber wenn er auf die obere oder untere Seite trifft, geht der Ball in die Mauer rein und er kommt nicht aus der Mauer raus. zum probieren:

[url]Minigolf_Mania.exe[/url]

Ich hoffe ihr versteht mein Problem!

~Editiert~
Aus Performance Gründen [ syntax ] durch [ code ] Tags ersetzt. MfG D2006
  • Zuletzt bearbeitet von BlitzBasic303 am Fr, Jan 11, 2013 22:35, insgesamt einmal bearbeitet
 

animago

BeitragDo, Okt 20, 2005 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hey, ich hab das mal getestet, entweder hast du das problem mit dem einfals und ausfllswingel schon gelöst. aber ich habe einen kleinen fehler entdeckt und wenn du ihn noch nicht hattest, ist es vielleicht gut es zu wissen. ich habe den ball so angespielt, das er fast gerade auf eine wand zugelaufen ist. der Ball klebte danach an der wand und es waren daraufhin 2 zielpointer zu sehen... etwa so....

user posted image

nur mal so gesagt als ein betatester Smile[/img]
Versuche niemals, die Realität zu kopieren.

Wenn du die Realität willst, dann lass den Computer aus und geh vor die Tür.

Wenn du Spaß haben willst, dann erschaffe eine andere Realität.
 

BlitzBasic303

Betreff: RE:

BeitragDo, Okt 20, 2005 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja! Genau das Problem. das gleiche passiert auch wenn du den Ball unten in den Schmalen rand:

spielst.Das liegt daran das ich denn neuen Winkel damit:
BlitzBasic: [AUSKLAPPEN]

angle# = 180 - angle#

ausrechne. Würde ich stattedesen
BlitzBasic: [AUSKLAPPEN]

angle# = 360 - angle#

verwenden ginge es oben und unten allerdings nicht mehr links und rechts

Mfg

BlitzBasic303
  • Zuletzt bearbeitet von BlitzBasic303 am Fr, Jan 11, 2013 22:53, insgesamt einmal bearbeitet

BlitzChecker

BeitragDo, Okt 20, 2005 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir geht das mit oben und unten auch. aber hast du noch kein Menü? Als ich das Spiel gestertet habe, zeigte er mir nur einen Schwarzen Bildschirm an Twisted Evil . Erst nachdem ich auf die 1 auf dem Ziffernblock gedrückt habe, startete das Spiel.

[edit]
Zur Winkelberechnung:
Arrow https://www.blitzforum.de/viewtopic.php?t=10263 Wink
www.xairro.com
 

BlitzBasic303

Betreff: RE:

BeitragDo, Okt 20, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
@BlitzChecker

Du kannst auf dem Ziffernblock 1,2,oder drei drücken um ein Level auszuwählen.

Vom Gleichen Link habe ich die Berechnung!

BlitzChecker

BeitragDo, Okt 20, 2005 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann würd ich aber noch ein grafisches Menü machen. Ansonsten wirklich gut!
www.xairro.com
 

animago

BeitragFr, Okt 21, 2005 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das problem hatte ich gestern auch mit dem schwarzen bildschirm. das liegt am grafics modus. habe ihn von vollbild auf fenster modus gestellt dann konnte man das sehen. das geht wenn du statt

Graphics 800,600,32,1

lieber das eingibst:

Graphics 800,600,32,3

habe das problem auch bei mir gehabt. weiss auch nicht warum das so ist.
bin eh mehr ein freund von fenster spielen Smile


mit deinem winkel würde ich das vielleicht mal mit ner if abfrage machen
wenn der ball unter, bzw über dem balken ist gilt der eine winkel. wenn der ball stattdessen neben dem balken ist gilt der andere. das währe meiner meinung nach eine logik lösung. programmiertechnisch bin ich leider zu faul deinen ganzen quelltext zu studieren. Smile
ich denke eine kleine funktion wenndaneben() oder so würde es tun Wink
Versuche niemals, die Realität zu kopieren.

Wenn du die Realität willst, dann lass den Computer aus und geh vor die Tür.

Wenn du Spaß haben willst, dann erschaffe eine andere Realität.

BlitzChecker

BeitragFr, Okt 21, 2005 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mal im Quelltext geguckt (der war ja deabei). Eigentlich müsste der wirklich einen Text ausgeben. Ich wollte den Code compilen, aber BlitzBasic gab mir nur Massen an Fehlern aus, z.B. "Wend without While". Deshalb an BlitzBasic303:
Ist das der Originalcode, der dabei ist?
www.xairro.com
 

BlitzBasic303

Betreff: RE:

BeitragFr, Okt 21, 2005 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich habe den Quellcode oben aus der Datei herauskopiert, bei mir funktioniert es. Rolling Eyes
 

animago

BeitragFr, Okt 21, 2005 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
den guten quelltext nimmst du am besten aus der gedownloadeten datei. da hatte ich ihn zumindest her. und der ging ohne prob zu compilen
Versuche niemals, die Realität zu kopieren.

Wenn du die Realität willst, dann lass den Computer aus und geh vor die Tür.

Wenn du Spaß haben willst, dann erschaffe eine andere Realität.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group