Stop bei colision

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

niggy

Betreff: Stop bei colision

BeitragSa, Jan 24, 2009 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
kann mir einer helfen?
ich wollte einen metroid verschnitt basteln aber ich kriege es nicht hin das man sofort aufhört sich zu bewegen sobald man gegen eine wand kommt
kann mir einer helfen?
function
Function moveleft ()
samusx = samusx-1
If ImagesCollide(samuslinks, samusx, samusy, frame1, hintergrund1, x2, y2, frame2) Then Goto noleft
SetBuffer BackBuffer ()
DrawImage samuslinks, samusx, samusy
Flip
DrawImage hintergrund2, x, y
DrawImage hintergrund1, x, y
.noleft
End Function
wobei samus die figur ist und samusx und samusy die koordinaten sind

coolo

BeitragSa, Jan 24, 2009 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Gibt es Die Code Tags.
2. Benutz NIE Goto, das bringt nur Ärger.
3. Bitte gewöhn die an deinen Code einzurücken mit [Tab]
3. Zu deinem Problem:
Code:

SetBuffer BackBuffer () ;Irgendwo am Anfang des Codes
global samusx ;Global setzen, sonst hats keine Wirkung
repeat
 cls
 DrawImage hintergrund2, x, y
 DrawImage hintergrund1, x, y
 DrawImage samuslinks, samusx, samusy
 If ImagesCollide(samuslinks, samusx, samusy, frame1, hintergrund1, x2, y2, frame2)=0 Then
  samusx = samusx-1
 endif
 Flip
until keyhit(1)
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat
 

Roma3ht

BeitragSa, Jan 24, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ImageCollide ist doch echt langsam. Kuck doch mal die Rob tuts an, da ist ne Kolli abfrage drin und die ist viel schneller.
 

niggy

BeitragSa, Jan 24, 2009 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Roma3ht hat Folgendes geschrieben:
ImageCollide ist doch echt langsam. Kuck doch mal die Rob tuts an, da ist ne Kolli abfrage drin und die ist viel schneller.


wenn du mit rob tuts robs blitz basic kurs 2 meinst dann find ich das wenn nicht sag mir was du meinst

und das andere funktioniert leider nicht
 

Roma3ht

BeitragSa, Jan 24, 2009 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau den 2. teil meine ich. Wenn du befolgst was rob schreibt, dann hast du in handumdrehen ne Kollisions abfrage.
 

niggy

BeitragSa, Jan 24, 2009 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
das hab ich doch hat aber nicht funktioniert

BladeRunner

Moderator

BeitragSa, Jan 24, 2009 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Roma3ht

BeitragSa, Jan 24, 2009 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir hats geklappt. Dann hast du was falsch gemacht. Schick mal code, ich geh jetz erstma Training.

Starwar

BeitragSa, Jan 24, 2009 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Abend,
Code:

If ImagesCollide(samuslinks, samusx, samusy, frame1, hintergrund1, x2, y2, frame2) Then Goto noleft
DrawImage hintergrund1, x, y

Das wiederspricht sich. Du macht eine Abfrage an x2 und y2 zeichnest aber an x und y.
Mein Tip: Alle Variablen mit Local/Global definieren und ein Kommentar schreiben, was sie bedeuten!
Und du solltest diese Reihenfolge beibehalten: 1.Bilder malen 2.Kollision überprüfen 3.Flip()
Zudem:
- Bilder und Variablen sind nur lokal (siehe hierzu Local) du solltest sie als Global vereinbaren oder gleich auf Funktion verzichten.
- Um eine Funktion vorzeitung zu beenden kannst du Return benutzen. (Goto ist oft einfacher, aber wenn die Codes länger werden verliert man den Überblick)
- Wenn du ein Bild hast, was du mit Loadimage lädst kannst du bei ImagesCollide als frame 0 angeben.
Hoffe es hilft.
MFG
 

niggy

BeitragSa, Jan 24, 2009 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Code:

;set graphics

Graphics 800, 600
;hintergrund

Global hintergrund1 = LoadImage("C:\Dokumente und Einstellungen\User\Desktop\blitzbasic\Grafiken\metroid_erstes lvl.bmp")
Global hintergrund2 = LoadImage("C:\Dokumente und Einstellungen\User\Desktop\blitzbasic\Grafiken\metroid_erstes level2.bmp")
Global samuslinks = LoadImage("C:\Dokumente und Einstellungen\User\Desktop\blitzbasic\Grafiken\samuslinks.bmp")
Global samusrechts = LoadImage("C:\Dokumente und Einstellungen\User\Desktop\blitzbasic\Grafiken\samusrechts.bmp")
SetBuffer BackBuffer()
DrawImage hintergrund2, x, y
DrawImage hintergrund1, x, y
MaskImage samuslinks, 255, 0, 255
MaskImage samusrechts, 255, 0, 255
MaskImage hintergrund1, 255, 0, 255
DrawImage samuslinks, 600, 373
SetBuffer BackBuffer()
DrawImage hintergrund2, x, y
DrawImage hintergrund1, x, y

;variabeln
Global samusX = 600
Global samusy = 373


;makes the music
levelsound=LoadSound ("C:\Dokumente und Einstellungen\User\Desktop\metroid\metroid_tallon.wav")
LoopSound levelsound
PlaySound(levelsound)


Goto start
;funktionen
;bewegungsfunktionen
   Function moveleft ()
     If ImagesCollide (samuslinks, samusx, samusy, frame1, hintergrund1, x2, y2, frame2)=1 Then
     samusx = samusx-1
     SetBuffer BackBuffer ()
     DrawImage samuslinks, samusx, samusy
     Flip
     DrawImage hintergrund2, x, y
     DrawImage hintergrund1, x, y
     EndIf
   End Function
   Function moveright ()
     samusx = samusx+1
     SetBuffer BackBuffer ()
     DrawImage samusrechts, samusx, samusy
     Flip
     DrawImage hintergrund2, x, y
     DrawImage hintergrund1, x, y
   End Function

.start



While Not KeyDown(1)
   ;bewegungsknöpfe
     If KeyDown(203) Then moveleft ()
     If KeyDown(205) Then moveright ()



Wend
End





ich weiß nich wie ich die bilder jetzt zeigen soll aber hintergrund2 is sowieso egal
der wichtige ist hintergrund1 weil es in ihm spielt in einem transparenten bereich[/code]

Starwar

BeitragSa, Jan 24, 2009 23:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest dir die Grundkenntnisse aneignen. Arbeite Robs Tutorials nochmal durch.
1. Bilder laden
2. Hauptschleife (While/Wend). Darin 1.Cls 2.Bilder zeichen 3. Kollisionen 3. Flip()
3.Funktionen am Ende des Codes
Nehm dir beim lesen des Tuts zeit und tippe alle Codes selber ab. Bitte tu uns den gefallen. Ich steh dir auch gerne persönlich per PM oder ICQ/MSN zur Verfügung.
MFG

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group