ImagesCollide

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

sandy2143

Betreff: ImagesCollide

BeitragMi, Dez 09, 2009 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also... ich soll für Informatik ein Spiel programmieren...
ich möchte ein Shooterspiel machen, bei dem sich 2 Menschen beschiessen... ich hab für beide einen Type erstellt, damit die schiessen können...
Nur mein Problem ist, das wenn die Schüsse auf gleicher Höhe sind dann sollen die zusammmenstoßen und verschwinden... Ich hab schon viel ausprobiert... es klappt gar nichts...

Bitte helft mir...
Danke!

Xeres

Moderator

BeitragMi, Dez 09, 2009 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Code nichts los...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

sandy2143

BeitragMi, Dez 09, 2009 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
wie ohne code?

Nicdel

BeitragMi, Dez 09, 2009 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig mal deinen Code Wink
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

ToeB

BeitragMi, Dez 09, 2009 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also du hast eine Schuss geschwindigkeit f. Um diese (Pixel-)Zahl wird der Schuss pro Frame verschoben, z.B. f = 3, jeder Schuss wird um 3 Pixel / Frame verschoben (+/- entscheidet die richtung). Jetzt Ziehst du nur noch ein Rect um die Schüsse (Nur Virtuell) und zwar mit RectsOverlap. Damit prüft man zwei Rechtecke auf Kollision. Jetzt musst du nur folgendes machen (erstes Rechteck = von links nach recht, zweites = von rechts nach links)
Code: [AUSKLAPPEN]
If RectsOverlap(s1x,s1y,s1w+f,s1h,s2x-f,s2y,s2w+f,s2h) then
;Löschen
Endif


So jetzt nur noch die Variablen für deine Werte einsetzen -Fertig

mfg ToeB
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!
 

sandy2143

BeitragMi, Dez 09, 2009 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ok...
meine types:

Type schuss
Field x
Field y
End Type

Type schusss
Field s
Field t
End Type

dann hab ich die bilder zu den Schüssen hochgeladen....

For a=Each schuss
DrawImage celli,a\x,a\y
Next

For a=Each schuss
a\x=a\x-4
Next

For b=Each schusss
DrawImage sons,b\s,b\t
Next

For b=Each schusss
b\s=b\s+4
Next



For b=Each schusss
DrawImage sons,b\s,b\t,0
Next

das is dafür das das weggeht... aber das funktioniert nicht..

If ImagesCollide(sons,s,t,0,celli,x,y,0)
DrawImage sons,600,600,0
DrawImage celli,600,600,0
EndIf

Nicdel

BeitragMi, Dez 09, 2009 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach den Code in Codeboxen, diese Dinger hier:
Code: [AUSKLAPPEN]
[code]Mein Code[/code]

Ich würde dir Raten, dass du dir noch mal ein Tutorial zu Types anschaust.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

sandy2143

BeitragMi, Dez 09, 2009 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke...
wie komm ich denn dahin? Very Happy

Xeres

Moderator

BeitragMi, Dez 09, 2009 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Gewöhne dir besser gleich eindeutige Bezeichnungen an...
schuss -> Tschuss1
schusss -> Tschuss2
Zusätzliche Buchstaben irgendwo an zu hängen ist schnell gemacht und genauso schnell übersehen...

Code: [AUSKLAPPEN]
For a=Each schuss
DrawImage celli,a\x,a\y
Next

For a=Each schuss
a\x=a\x-4
Next

Hier verdoppelst du die Schleife... wozu? Du kannst innerhalb der For...Each Schleife beides hintereinander machen.

Code: [AUSKLAPPEN]
ImagesCollide(sons,s,t,0,celli,x,y,0)
Das Bild ist ja richtig, aber was sollen s, t, x und y sein? Da müssen doch die Koordinaten der Schüsse hin, oder?
also a\x, a\y und b\x, b\y - das noch in zwei For...each Schleifen die alle Schüsse mit jedem anderen auf Kollision prüfen...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Hangman

BeitragDo, Dez 10, 2009 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte zwar leider keine Zeit mir das genauer anzugucken aber um auf deine Frage zu antworten: Normalerweise funktioniert so eine Schusskollision mit Types:

Code: [AUSKLAPPEN]

For Schuss1.Schuss1 = Each Schuss1
 For Schuss2.Schuss2 = Each Schuss2
  If Imagesoverlap(Schuss1\Bild,Schuss1\X,Schuss1\Y,Schuss2\Bild,Schuss2\X,Schuss2\Y) Then
   Delete Schuss1
   Delete Schuss2
   Exit
  End If
 Next
Next
Ich habe Berthold gebrochen.
  • Zuletzt bearbeitet von Hangman am Fr, Dez 11, 2009 14:45, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDo, Dez 10, 2009 23:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das gibt 100%ig ein MAV.
Schuss1 hat dann den Inhalt NULL und der Zugriff darauf ist illegal... Dafür benutze ich immer Variablen die anzeigen, dass etwas vernichtet werden kann.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

D2006

Administrator

BeitragFr, Dez 11, 2009 9:16
Antworten mit Zitat
Benutzer-Profile anzeigen
In diesem Fall könnte ein Exit nach Delete Schuss2 Abhilfe schaffen.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

das wurgel

BeitragFr, Dez 11, 2009 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wird trotzdem nicht funktionieren, da an ImagesOverlap ein Parameter zuviel übergeben wird.
Zitat:
Code: [AUSKLAPPEN]
If Imagesoverlap(Schuss1\Bild,Schuss1\X,Schuss1\Y, -->Schuss2<-- ,Schuss2\Bild,Schuss2\X,Schuss2\Y) Then


Außerdem würde ich RectsOverlap verwenden und die Schussgeschwindigkeit mit einberechnen, da die Schüsse bei hoher Geschwindigkeit sonst durch sich durch fliegen könnten, ohne zu kollidieren.
Code: [AUSKLAPPEN]

For Schuss1.Schuss1 = Each Schuss1
 For Schuss2.Schuss2 = Each Schuss2
  If RectsOverlap(Schuss1\X,Schuss1\Y,Schuss1\W+Schuss1\XSpeed,Schuss1\H+Schuss1\YSpeed, Schuss2\X,Schuss2\Y,Schuss2\W+Schuss2\XSpeed,Schuss2\H+Schuss2\YSpeed) Then
   Delete Schuss1
   Delete Schuss2
   Exit
  End If
 Next
Next
1 ist ungefähr 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group