Drei Fragen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

krux

Betreff: Drei Fragen

BeitragSo, März 13, 2005 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Wie gann ich viele gleiche objekte, mit kleinen unterschiedlichen eigenschaften, wie z.b. die Geschwindigkeit und Bewegungsrichtung bei Schrotkugeln, erschaffen und zu einem belibigen zeitpunkt wieder Löschen, das heißt welche Befehle brauche ich?

2. Wie kann ich bei einer Kollision von zwei objekten die eigenschaften des einen Objektes abhängig von den eigenschaften des anderen Objekts Verändern, wie z.B. die Lebensenergie abhängig von der Geschwindigkeit der einschlagenden Kugel?

Und jetzt das Wichtigste

3. Wie muss ich das schreiben wenn ich nicht jede möglichkeit von kollidierenden Objekten einzeln Aufschreiben möchte?

Chester

BeitragSo, März 13, 2005 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir mal TheShadow's Type Tutorials an:

http://www.blitzbase.de/tutorials/shadow_1.htm

simi

BeitragSo, März 13, 2005 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

beziehen sich die Fragen auf 2D oder 3D?
 

krux

BeitragSo, März 13, 2005 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
2D und wenn du es genau wissen willst den code für mein Aktuelles Projekt hab ich unter Projekte / Vektor Tanks gepostet und ich find das is dafür dass ich erst seit einer Woche BlitzBasic habe recht gut

simi

BeitragSo, März 13, 2005 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Dazu brauchst du Types....:
http://www.blitzbase.de/tutorials/shadow_1.htm
Das musst du zuerst mal durchlesen und checken....

Es könnte dann etwa so aussehen:

Code: [AUSKLAPPEN]

Type schuss
  Field tempo
  Field richtung
  field grösse
  ...
end Type

if keyDown(schusstaste) then
  for x =  1 to 100
    s.schuss = new schuss
    s\tempo = Rand(10,20)
    ....
  next
end if

for s.schuss = each schuss
  if kollision then delete schuss
next


2. Also, dann prüfst du den Spieler mit der Kugel auf Kollision. Wenn es eine Kollision gibt, dann Rechnest du z.B die geschwindigkeit von der Lebensenergie weg:
Code: [AUSKLAPPEN]

for s.schuss = each schuss
  if kollision then Lebensenergie = Lebensenergie - s\tempo
next


3. Ich chekce nicht genau was du meinst....

cu simi

Ebola33

BeitragSo, März 13, 2005 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
zu deiner 3. Frage :

Du musst nunmal jede erdenkliche Kombination abfragen.
Dies geschieht in der Regel mit 2 ineinander verschachtelten Schleifen.

Also etwa so :
Code: [AUSKLAPPEN]

for gegner=0 to gegneranzahl
  for schuss=0 to schussanzahl
    ;kollisionsabfrage
  next
next



Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

krux

BeitragSo, März 13, 2005 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
ich versuche erst mal mit nem Geschütz ohne limit ballern zu können und die Schüsse in Types zu Speichern, aber irgendwie geht da überhaupt nix

BlitzBasic: [AUSKLAPPEN]

Graphics 1024,768,16,1
SetBuffer BackBuffer ()

Global Kanonex = 50
Global Kanoney =384
Global aim

Repeat
Cls

aim = ATan2(MouseY()-KanoneY,MouseX()-KanoneX)
If aim < 0 Then aim = aim + 360

If MouseHit (1)
Bam.Schuss = New Schuss
Bam\PosX = KanoneX + Cos(aim) * 20
Bam\PosY = KanoneY + Sin(aim) * 20
Bam\XSpeed = Cos(aim)*2
Bam\YSpeed = Sin(aim)*2
Bam\Lifetime = 100
EndIf





For Bam = Each Schuss
Bam.schuss\PosX = Bam\PosX + Bam\XSpeed
Bam.schuss\PosY = Bam\PosY + Bam\YSpeed
Bam.schuss\Lifetime = bam\Lifetime - 1
If Lifetime = 0 Then Delete bam.schuss
Oval Bam.schuss\PosX - 3 , Bam.schuss\PosY - 3 , 6 , 6

Next


Marker(MouseX(),MouseY())
GeschtzZeichnen(KanoneX,KanoneY)

Delay 5
Flip
Until KeyHit(1)

End




Type Schuss
Field PosX#
Field PosY#
Field XSpeed#
Field YSpeed#
Field Lifetime
End Type

Function Marker(x,y)
Plot x,y
Line x-10,y,x-5,y
Line x+10,y,x+5,y
Line x,y-10,x,y-5
Line x,y+10,x,y+5
End Function

Function GeschtzZeichnen(X,Y)

Rect x-7,y-7,14,14,0

ax = X + ( Cos(aim- 8) * 20 )
ay = Y + ( Sin(aim- 8) * 20 )
bx = X + ( Cos(aim-135) * 3 )
by = Y + ( Sin(aim-135) * 3 )
cx = X + ( Cos(aim-225) * 3 )
cy = Y + ( Sin(aim-225) * 3 )
dx = X + ( Cos(aim-352) * 20 )
dy = Y + ( Sin(aim-352) * 20 )

Line ax,ay,bx,by
Line bx,by,cx,cy
Line cx,cy,dx,dy
Line dx,dy,ax,ay
End Function


Dieser code is nur dafür da, dass ich was ausprobieren kann, später bau ich das dann ins Hauptprogram ein, aber wo is der Fehler, irgendwie Schießt der garnicht, und die kugeln tauchen nur einmal kurz oben links in der Ecke auf und sind dann auch schon wieder weg. Ich will einfach nur da hin ballern, wo ich hin klicke.

Edit: ich hab den code nen bissel verändert und jetzt zeigt der mir immer wenn ich das programm starte und Maus1 drücke "Memory access violation" an
  • Zuletzt bearbeitet von krux am Mo, März 14, 2005 18:01, insgesamt 2-mal bearbeitet

MBC

BeitragSo, März 13, 2005 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich glaub, ichhab den Fehler gefunden:
Du hattest paarmal bei bam\lifetime das bam\ vergessen, und deshalb wurden die schüsse immer direkt wieder gelösht.
Also muss die Stelle so heißen:
BlitzBasic: [AUSKLAPPEN]

For Bam = Each Schuss
Bam\PosX = Bam\PosX + Sin(bam\Richtung+90)*bam\Geschwindigkeit
Bam\PosY = Bam\Posy - Cos(bam\Richtung+90)*bam\Geschwindigkeit
Bam\Lifetime = bam\Lifetime - 1
Oval Bam\PosX - 3 , Bam\PosY - 3 , 6 , 6
If bam\Lifetime < 0 Then Delete bam
Next


warum man zu der richtung 90 addieren muss, weiß ich ehrlich gesagt nicht, kenn mich da noch nich so aus, aber so funktionierts. Very Happy

Also dann
MfG
MBC
Computer sind auch nur Menschen! Wink
 

krux

BeitragMo, März 14, 2005 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
das war nicht der fehler kannst du noch mal bitte nachschauen das klappt irgendwie nicht

MBC

BeitragMo, März 14, 2005 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hä?
Spiin ich jetzt? Sah der code gestern nicht noch anders aus? Shocked
Aber, na ja, hier hab ich mal den code zusammengebastelt, mit dems bei mir gestern ging:

BlitzBasic: [AUSKLAPPEN]

Graphics 1024,768,16,1
SetBuffer BackBuffer ()


Global Kanonex = 50
Global Kanoney =384
Global aim

Repeat
Cls

aim = ATan2(MouseY()-KanoneY,MouseX()-KanoneX)
If aim < 0 Then aim = aim + 360

If MouseHit (1)
Bam.Schuss = New Schuss
Bam\PosX = KanoneX + Cos(aim) * 20
Bam\PosY = KanoneY + Sin(aim) * 20
Bam\XSpeed = Cos(aim)*2
Bam\YSpeed = Sin(aim)*2
bam\richtung=aim
Bam\Lifetime = 100
EndIf


For Bam = Each Schuss
Bam\PosX = Bam\PosX + bam\xspeed
Bam\PosY = Bam\Posy + bam\yspeed
Bam\Lifetime = bam\Lifetime - 1
Oval Bam\PosX - 3 , Bam\PosY - 3 , 6 , 6
If bam\Lifetime < 0 Then Delete bam
Next



Marker(MouseX(),MouseY())
GeschtzZeichnen(KanoneX,KanoneY)

Delay 5
Flip
Until KeyHit(1)

End


Type Schuss
Field PosX#
Field PosY#
Field XSpeed#
Field YSpeed#
Field richtung
Field Lifetime
End Type


Function Marker(x,y)
Plot x,y
Line x-10,y,x-5,y
Line x+10,y,x+5,y
Line x,y-10,x,y-5
Line x,y+10,x,y+5
End Function

Function GeschtzZeichnen(X,Y)

Rect x-7,y-7,14,14,0

ax = X + ( Cos(aim- 8) * 20 )
ay = Y + ( Sin(aim- 8) * 20 )
bx = X + ( Cos(aim-135) * 3 )
by = Y + ( Sin(aim-135) * 3 )
cx = X + ( Cos(aim-225) * 3 )
cy = Y + ( Sin(aim-225) * 3 )
dx = X + ( Cos(aim-352) * 20 )
dy = Y + ( Sin(aim-352) * 20 )

Line ax,ay,bx,by
Line bx,by,cx,cy
Line cx,cy,dx,dy
Line dx,dy,ax,ay
End Function


Bittschön, so sollte es jetzt gehen, denke ich
Aber der Code war gestern doch anders... *confused*

MfG
MBC
Computer sind auch nur Menschen! Wink
 

krux

BeitragMo, März 14, 2005 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
MBC hat Folgendes geschrieben:
Hä?
Spiin ich jetzt? Sah der code gestern nicht noch anders aus? Shocked
Aber, na ja, hier hab ich mal den code zusammengebastelt, mit dems bei mir gestern ging:

MfG
MBC


danke aber das ich den code verändert hab hab ich auch unten dran geschrieben

MBC

BeitragMo, März 14, 2005 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja, stimmt, jetzt seh ichs auch. Naja, bin ich wohl doch noch nich ganz übergeschnappt. Laughing
Aber is ja gut, wenns jetzt geht..

MfG
MBC
Computer sind auch nur Menschen! Wink
 

krux

BeitragMo, März 14, 2005 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt weiß ich aber immer noch nicht was mein fehler war könntest du mir sagen was da falsch wa ich find nix was ich anders gemacht habe

MBC

BeitragMo, März 14, 2005 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

So wie ich das sehe, war dein einziger "Fehler" eine kleine Unachtsamkeit in Bezug auf Types, und zwar:
BlitzBasic: [AUSKLAPPEN]

If bam\Lifetime<0 Then Delete bam

Bei dieser Zeile hattest du schlicht und einfach das "\bam" vor Lifetime vergessen. Somit war die Bedingung (Lifetime=0, weil du halt der Var "Lifetime" keinen Wert zugewiesen hast, sondern nur "bam\lifetime") immer True, sodass der Schuss schon wieder gelöscht wurde, bevor sich da irgendwas tun konnte.
Ich hoffe, das war jetzt einigermaßen verständlich, wenn noch Zeug unklar ist, einfach fragen.

Edit: IS BLÖDSINN! Lifetime war nie KLEINER null. Also, momentan blick ich jetzt auch nich mehr durch, ich gucks mir nochmal an, weiteres folgt
Edit II: Rah, was schreib ich nur... also, langsam: Das da oben gilt auf jeden Fall für deinen geänderten Code, denn da setzt du als Bedingung 0=0 (Lifetime=0), und dann wird alles gelöscht. Aber ich weiß nicht, ob das beim vorherigen Code auch so war, denk aber dann schon...
Und nochn Tip: Schalt den Debugger ein (Program->Debug Enabled?), dann kommen genauere Fehlermeldungen, in dem Fall "Object does not exist". In der Hoffnung, dass das jetzt das letzt EDIT war,

MfG
MBC
Computer sind auch nur Menschen! Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group