kollision

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

mr x

BeitragMi, Feb 11, 2004 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
dann kommt: function alien not found Exclamation
besser heimlich schlau, als unheimlich blöd

Mr.Keks

BeitragMi, Feb 11, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht sollte man mal darüber nachdenken, den alien-array anzulegen? ^^
MrKeks.net

Ctuchik

BeitragMi, Feb 11, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Tipp: Rück überall ordentlich ein wenn du ein if machst, dann findest du fehlende End Ifs leichter
Noch ein Tipp: Benutz keine Variable doppelt! Alien war sowohl für die Grafik als auch als Array vorhanden!

Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()
hinter=LoadImage("/shooter2/Grafik/Sterne.bmp")
humanoid=LoadImage("/shooter2/Grafik/Schiff.bmp")
aliengfx=LoadImage("/shooter2/Grafik/Alien.bmp")
rakete=LoadImage("/shooter2/Grafik/Rakete.bmp")
laser=LoadImage("/shooter2/Grafik/Laser.bmp")

schusston=LoadSound("/shooter2/Sound/shoot.wav")
trefferton=LoadSound("/shooter2/Sound/boom.wav")
;
Dim Las(100,2)
Dim Rak(100,2)
Dim Alien(100)
;
X=305
Y=420
;
X2=305
Y2=20
;
;Hauptschleife
;
Repeat
Cls
;
;
If KeyDown(57) Then Delay 30 ;Billigbullettime *lol*
;
;
H=H+1
If H=200 Then H=0
TileBlock hinter,0,H
DrawImage humanoid,X,Y
DrawImage aliengfx,X2,Y2
;
;Schuss-Test (humanoid)
If KeyHit(76) Then
  Schuss = Schuss + 1
  If Schuss = 101 Then Schuss = 1
  Rak(Schuss,0) = 1
  Rak(Schuss,1) = X + 9
  Rak(Schuss,2) = Y - 25
  PlaySound (schusston)
EndIf
;ggf. Raketen zeichnen
For I = 1 To 100
  If Rak(I,0) = 1 Then
    DrawImage rakete, Rak(I,1),Rak(I,2)
    Rak(I,2) = Rak(I,2) - 6
  EndIf
Next
;Schuss-Test (alien)
If KeyHit(31) Then
  Schuss2 = Schuss2 + 1
  If Schuss2 = 101 Then Schuss2 = 1
  Las(Schuss2,0) = 1
  Las(Schuss2,1) = X2 + 9
  Las(Schuss2,2) = Y2 + 25
  PlaySound (schusston)
EndIf
;ggf. Laser zeichnen
For P = 1 To 100
  If Las(P,0) = 1 Then
    DrawImage laser, Las(P,1),las(P,2)
  Las(P,2) = Las(P,2) + 10
EndIf
Next
;kollision
If ImagesOverlap(aliengfx,alien(X2),alien(Y2),rakete,Rak(I,1),Rak(I,2))Then
  PlaySound (trefferton)
End If
;
;Pfeiltasten für humanoid abfragen
If KeyDown(77)=1 Then X=X + 6
If KeyDown(75)=1 Then X=X - 6
;
;Pfeiltasten für alien abfragen
If KeyDown(32)=1 Then X2=X2 + 2
If KeyDown(30)=1 Then X2=X2 - 2
;
;Randüberschreitung verhindern (humanoid)
If X < 0 Then X = 0
If X > 609 Then X = 609
;
;Randüberschreitung verhindern (alien)
If X2 < 0 Then X2 = 0
If X2 > 609 Then X2 = 609

Flip
Until KeyHit(1)


So sollte es stimmen
Jetzt kommt bei mir nur noch der "Image does not exist"-Fehler!
Ohne die Bilder kann ich nicht weitertesten Smile

mfG Ctuchik

mr x

BeitragMi, Feb 11, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
läuft zwar jetzt, danke.....aber irgentein sound läuft auch, aber so schnell, dass ich nicht mit sicherheit sagen kann welcher es is. (tippe auf trefferton)

EDIT: is doch nich trefferton, der kommt erst, wenn ich Esc drücke
besser heimlich schlau, als unheimlich blöd

mr x

BeitragMi, Feb 11, 2004 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
so spontan find ichs nich, aber ich werd mir morgen vormittag mal reinstüzen.
(wenns jemand findet, bitte sagen)
besser heimlich schlau, als unheimlich blöd
 

HOT-BIT

Gast

BeitragMi, Feb 11, 2004 21:34
Antworten mit Zitat
Hi !

LOL

IT'S VERY NICE, wenn man was weiß !

Vielleicht solltest du mal darüber nachdenken, etwas leichteres für den Anfang zu probieren !?

Wie wäre es mit: *Hello World* auf den Screen zu printen ?
Und das in allen Varianten !

Dann kannst ja umsteigen auf Grafik-Fenster. Hier kannst mal üben die Bildchen zu laden, und Linien zu ziehen. Mit allen Farben die dir zur Verfügung stehen. Rect ist da noch zu schwer. Hat ja so blöde Parameter..

Mal im Ernst:
Du glaubst doch selbst nicht, daß dieses selbst (ab)geschriebene Prog jemals in die Endphase kommt ?
Du wirst auch hoffentlich nicht der Überzeugung sein, in den nächsten 2 Wochen dein selbst (ab)geschriebenes Prog zu verstehen ?
Du wirst wohl auch nicht die Dreistigkeit haben, und mir das nicht glauben ?

Du hast eine recht große und freche Klappe im Chat gehabt ! Das war nicht fein. Überhaupt nicht für so einen Loser wie du es zur Zeit bist !
Ich hoffe, daß sich das ändern wird. Ansonsten .....

ABER:
Du hast eines vielen Anfängern vorraus !
Du hast einen guten Lehrer !
Du hast mich !


In drei Monat hören wir dann wieder etwas von dir !

Danke, Toni

mr x

BeitragDo, Feb 12, 2004 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ehrlichgesagt, auf DICH kann ich verzichten. was bringst DU mir schon bei?
(den rest kommentier ich jetzt nicht, wär eh nur zeitverschwendung)

so loopt der sound zwar nimma, aber es tut sich auch nix, wenn die rakete trifft


Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()
hinter=LoadImage("/shooter2/Grafik/Sterne.bmp")
humanoid=LoadImage("/shooter2/Grafik/Schiff.bmp")
aliengfx=LoadImage("/shooter2/Grafik/Alien.bmp")
rakete=LoadImage("/shooter2/Grafik/Rakete.bmp")
laser=LoadImage("/shooter2/Grafik/Laser.bmp")

schusston=LoadSound("/shooter2/Sound/shoot.wav")
trefferton=LoadSound("/shooter2/Sound/boom.wav")
;
Dim Las(100,2)
Dim Rak(100,2)
Dim Alien(100)
;
X=305
Y=420
;
X2=305
Y2=20
;
;Hauptschleife
;
Repeat
Cls
;
;
If KeyDown(57) Then Delay 30 ;Billigbullettime *lol*
;
;
H=H+1
If H=200 Then H=0
TileBlock hinter,0,H
DrawImage humanoid,X,Y
DrawImage aliengfx,X2,Y2
;
;Schuss-Test (humanoid)
If KeyHit(76) Then
  Schuss = Schuss + 1
  If Schuss = 101 Then Schuss = 1
  Rak(Schuss,0) = 1
  Rak(Schuss,1) = X + 9
  Rak(Schuss,2) = Y - 25
  PlaySound (schusston)
EndIf
;ggf. Raketen zeichnen
For I = 1 To 100
  If Rak(I,0) = 1 Then
    DrawImage rakete, Rak(I,1),Rak(I,2)
    Rak(I,2) = Rak(I,2) - 6
  EndIf
Next
;Schuss-Test (alien)
If KeyHit(31) Then
  Schuss2 = Schuss2 + 1
  If Schuss2 = 101 Then Schuss2 = 1
  Las(Schuss2,0) = 1
  Las(Schuss2,1) = X2 + 9
  Las(Schuss2,2) = Y2 + 25
  PlaySound (schusston)
EndIf
;ggf. Laser zeichnen
For P = 1 To 100
  If Las(P,0) = 1 Then
    DrawImage laser, Las(P,1),las(P,2)
  Las(P,2) = Las(P,2) + 10
EndIf
Next
;kollision
if Rak(I,1) = 1 then
If ImagesOverlap(aliengfx,alien(X2),alien(Y2),rakete,Rak(I,1),Rak(I,2))Then
  PlaySound (trefferton)
End If
endif
;
;Pfeiltasten für humanoid abfragen
If KeyDown(77)=1 Then X=X + 6
If KeyDown(75)=1 Then X=X - 6
;
;Pfeiltasten für alien abfragen
If KeyDown(32)=1 Then X2=X2 + 2
If KeyDown(30)=1 Then X2=X2 - 2
;
;Randüberschreitung verhindern (humanoid)
If X < 0 Then X = 0
If X > 609 Then X = 609
;
;Randüberschreitung verhindern (alien)
If X2 < 0 Then X2 = 0
If X2 > 609 Then X2 = 609

Flip
Until KeyHit(1)

[MOD="Inarie"]Habe mal den Doppelpost zu einem gemacht.[/MOD]
besser heimlich schlau, als unheimlich blöd
 

Edlothiol

BeitragDo, Feb 12, 2004 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast die Kollisionsabfrage ausserhalb der For - Schleife. Du musst sie (am besten) direkt an die Stelle machen, wo du sie zeichnest.

mr x

BeitragDo, Feb 12, 2004 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
es is total egal, wo ich die hinmache. is jedesmal des gleiche ergebnis Sad
besser heimlich schlau, als unheimlich blöd

mr x

BeitragFr, Feb 13, 2004 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du schon so ein supertoller programmierer bist, hot-bit, dann kannst du mir ja auch sicher zeigen wie es geht. (aus vorhandenem kann man auch lernen)
besser heimlich schlau, als unheimlich blöd
 

HOT-BIT

Gast

BeitragFr, Feb 13, 2004 12:29
Antworten mit Zitat
Hallo !

Hatte nicht vorgehabt, hier überhaupt noch was dazu zu sagen, aber bitte:

WO IST DA EIN PROBLEM ?

Code: [AUSKLAPPEN]

;kollision
For i=1 To 100
If Rak(I,0) = 1 Then
   If ImagesOverlap(aliengfx,X2,Y2,rakete,Rak(I,1),Rak(I,2))
      PlaySound (trefferton)
   End If
EndIf
Next


Deine Denkfehler hier waren:
1.) Die Abfrage nicht in einer Schleife

2.) Den Status von Rak(I,0) mit Rak(I,1) verwechselt

3.) X2 kann den Wert von 0-609 oder so annehmen
Du hast aber nur bis 100 dimensioniert
Also konnte es nur in bestimmten Situationen zu einer Kollision kommen
Darum war alien(X2) und alien(Y2) total verkehrt gedacht


Und noch eines: NICHT BLÖD REDEN !

Toni

mr x

BeitragFr, Feb 13, 2004 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
erstmal, danke.

das letzte kommentier ich dann mal wieder nicht, aber da kann man sich ewig drüber streiten.
besser heimlich schlau, als unheimlich blöd
 

HOT-BIT

Gast

BeitragFr, Feb 13, 2004 15:25
Antworten mit Zitat
Hmm,

wäre vielleicht auch nicht schlecht, zu sagen, ob es funktioniert oder nicht !

Danke, Toni

mr x

BeitragFr, Feb 13, 2004 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
geht einwandfrei Very Happy ,sry
besser heimlich schlau, als unheimlich blöd
 

HOT-BIT

Gast

BeitragFr, Feb 13, 2004 16:26
Antworten mit Zitat
Hi !

Wenn schon vielen was vorraus hast, wie ich andeutete, dann mal ein Tipp:

Lass dir einfach immer die Variablen-Werte anzeigen.
Da kommst am leichtesten drauf, wo der Fehler sein könnte !

Und: der Computer ist wie ein Baby. Dem mußt alles erklären. Also mußt du das auch verstehen, was du ihm beibringen willst. Ansonsten wird das nichts. Umsonst kommt nicht immer wieder die Aufforderung, sich selbst Wissen beizubringen !

Und man braucht halt auch einen guten Lehrer ! Smile


Edit:
Deine y-Werte der Raketen werden auch noch verändert, wenn sie über die 0-Grenze fahren. Das heißt, wenn die Raketen kleiner 0 sind, den Wert von Rak(I,0) auf 0 setzen. Sonst sind die noch immer aktiv !


Toni

mr x

BeitragFr, Feb 13, 2004 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
also einfach noch
Code: [AUSKLAPPEN]

if Rak(I,0) < 0 then Rak(I,0) = 0

einfügen, oder?

oder is des sinnvoller?
Code: [AUSKLAPPEN]

if Rak(I,0) = -1 then Rak(I,0) = 0
besser heimlich schlau, als unheimlich blöd

Slayer

BeitragFr, Feb 13, 2004 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
mr x hat Folgendes geschrieben:
also einfach noch
Code: [AUSKLAPPEN]

if Rak(I,0) < 0 then Rak(I,0) = 0

einfügen, oder?

oder is des sinnvoller?
Code: [AUSKLAPPEN]

if Rak(I,0) = -1 then Rak(I,0) = 0



Hi mr x,
ich hab jetzt nicht Deinen ganzen Code gelesen, aber ich würde die obere
if abfrage nehmen.
Warum ?

wenn du die werte auch mal mit 2 verkleinerst und Du unter 0 kommst wird das array auch auf 0 gesetzt.
Bei der zweiten if abfrage würde das nicht passieren, da auch den wert - 2
haben könntest.
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version
 

HOT-BIT

Gast

BeitragFr, Feb 13, 2004 18:12
Antworten mit Zitat
Hmm,

warum -1 ?
Kommt das irgendwo vor ?

Ich sehe schon, du hast das noch immer nicht intus !

Rak(I,0)= ob die Rakete abgefeuert ist, oder nicht. Wenn 1 dann ist sie unterwegs
Rak(I,1)= die x-koordinate der Rakete
Rak(I,2)= die y-Koordinate der Rakete

Das heißt nun, wenn Rak(I,2)=<0 dann gehört Rak(I,0)=0.
Damit ist diese Rakete abgeschaltet.

Pfff..., das sind doch die leichtesten Übungen. Sowas macht man bevor überhaupt die Überlegung aufkommt, selbst ein Game zu machen !

Komme mir vor wie ein Lehrer. Hmm, das steht mir nicht. Muß das wieder einstellen Smile


Toni
  • Zuletzt bearbeitet von HOT-BIT am Fr, Feb 13, 2004 18:15, insgesamt einmal bearbeitet

mr x

BeitragFr, Feb 13, 2004 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte nur gedacht, dass -1 halt auch gehen könnte....
aber danke für die aufklärung
besser heimlich schlau, als unheimlich blöd

mr x

BeitragFr, Feb 13, 2004 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
die 2. abfrage war jetzt ja nichtmehr schwer(danke nochmal) aber ich hab jetzt schon wieder ein anfängerproblem Sad :
ich krieg einfach keinen zähler hin, der die treffer zählt und dann ausgibt Confused
wenn mir jemand helfen kann wärs gut, wenn nich, hab ich wohl pech gehabt.
aber es gibt hier ja eigentlich genug, die damit kein prob damit haben dürften.
besser heimlich schlau, als unheimlich blöd

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group