Schüsse mit Dim oder Types

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Dark Coder

Betreff: Schüsse mit Dim oder Types

BeitragMo, Apr 17, 2006 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie mach ich das mit den schüssen kann mir einer kleines code beispiel geben? Mit was könnte ich das am besten machen Types oder Dims?
 

HW

BeitragMo, Apr 17, 2006 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Schüsse machst du am besten mit Types. Ein Codebeispiel solltest du allerdings nicht verlangen, von Copy&Paste lernt man nichts. Je nachdem, wie du die Schüsse gestalten willst, gibst du den Types für die Schüsse unterschiedliche Fields, z.B. X und Y Fields für die Koordinatenposition der Schussgrafiken.

5k41

BeitragMo, Apr 17, 2006 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
geht am besten mit types, aber WIE man das macht das darfst du selbst rausfinden Wink

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

x-pressive

BeitragMo, Apr 17, 2006 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Gerade zum Thema Schüsse und Types gibt's schon massenhaft andere Beiträge. Benutze bitte einfach mal die Suchfunktion.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

dominik

BeitragMo, Apr 17, 2006 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du noch garkeine Ahnung von keinem von beidem hast darf ich dir raten mit Dims anzufangen, Types werden dich nur demotivieren.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.

x-pressive

BeitragMo, Apr 17, 2006 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrays sind in solchen Fällen kompliziert! Types sind einfach und wie geschaffen dafür. Wer das nicht versteht, quält sich nur unnötig selbst oder hat's einfach nie mit Types versucht.

Sich in Types einzuarbeiten dauert genau einen Tag (in Worten: EINS!). Da ist nichts schweres dran und nichts, was ein Anfänger nicht verstehen würde. Ich frage mich, warum immer noch das Gerücht gestreut wird, Types wären "kompliziert" (meist behaupten das immer nur jene, die sich konsequent noch nie damit befasst haben und dem Thema selbst aus Aberglaube ständig aus dem Weg gehen).

Fakt ist: Types machen das Leben hundertmal einfacher und den Code sauberer und leichter nachvollziehbar. Vor allem und gerade für Anfänger.

Ausserdem haben Types noch mehr Vorteile: gerade bei "Listen", in denen immer wieder einzelne Objekte gelöscht werden (z.B. Schüsse, die aus dem Bild wandern), ist die Handhabung viel einfacher, da nicht, wie bei Arrays, fehleranfällige "Lücken" entstehen.

Und vor allem, wenn man pro Objekt mehrere Eigenschaften (Position, Speed usw.) verwalten muss, ist das mit Arrays super-fehleranfällig und die reinste Qual. Types sind da ein wahrer Segen.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

sirokuhl

BeitragMo, Apr 17, 2006 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
types sind zwar einfach, aber für anfänger meist nicht so leicht zu verstehen.
ich hab anfangs auch arrays benutzt, bis ich auf ein sehr gutes types-tutorial gestoßen bin.
ich bin ehrlich gesagt auch der meinung, dass types nichts für totale anfänger ist.
erstmal die leichten sachen lernen dann bei den schweren weitermachen.

x-pressive

BeitragMo, Apr 17, 2006 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Man muß halt nur verstehen, daß ein Type nur eine "Schablone" ist, und an sich noch kein wirkliches Objekt. Erst wenn man jeweils mit NEW eine neue Instanz (oder Klon) nach dieser Schablone erschafft, hat man halt ein neues, "wirklich vorhandenes" Objekt, mit dem man dann arbeiten kann, und dessen Eigenschafts-Felder man dann mit beliebigen Werten füllen kann.

Aber diesen Zusammenhang kann man in einer Viertelstunde begreifen, wenn man damit arbeitet. Warum sollte man sich das Leben wochen- oder monatelang schwer machen, anstatt sich einfach mal ein paar Stunden in Ruhe damit zu beschäftigen?

"Schwer" ist für mich etwas, dessen Anwendung dauerhaft kompliziert ist. Und das sind Types sicher nicht. Wie gesagt, einfach mal einen Tag investieren, dann ist die Sache gegessen und du hast eine neue, mächtige Wunderwaffe.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Cat

BeitragMo, Apr 17, 2006 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habs auch erst gestern geschnallt, wie man mit types schiessen kann aber wenn man es dann mal versteht ist es ganz simple. am besten du suchst dir ´n paar tutorials, auf www.robsite.de gibts ein paar wirklich klasse tuts zu den types. wenn du aber noch anfänger in blitzbasic bist solltest du dich zuerst mit einfachen sachen bechäftigen.
 

Dark Coder

BeitragMi, Apr 19, 2006 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Jau mit den Types habe ich verstanden ist echt total einfach Smile

nochmal ne frage hab sofort nachdem ich das mit den types verstanden habe paar sache probiert meine letzte war das man einen spieler steuern kann und bomben legen kann mit der taste a nach bis 2 sek explodiert die bombe dann habe auch ein explosions.bmp also ein animiertes meine frage ist wie mach ich das ,dass wenn die bombe explodiert nicht mein spieler dann hark oder ich ihn gar nicht steuern kann in dieser zeit? darft ja eingentlich nicht sein das wenn die bombe hochgeht man sich nicht bewegen kann *GG* ich weiss warum das so ist aber finde im moment keinen anderen coder weg kann mir jemand von euch helfen ich poste mal ebend den code:


BlitzBasic: [AUSKLAPPEN]

Graphics 320,240,16,1
SetBuffer BackBuffer()


;spieler einstellungen

Global spielerx# = 160
Global spielery# = 120


Global spieler = LoadImage ("spieler.bmp")

MaskImage spieler, 0,0,255




;lade sounds
boom = LoadSound("Boom1.wav")




; schablone für bombe wird erstellt

Type TBombe

Field bild

Field boom

Field xb%

Field yb%

Field timer%

End Type
















Repeat
ClsColor 0,100,0
Cls






;spieler bewegung

If KeyDown(203) Then spielerx# = spielerx# - 1

If KeyDown(205) Then spielerx# = spielerx# + 1

If KeyDown(208) Then spielery# = spielery# + 1

If KeyDown(200) Then spielery# = spielery# - 1



;x und y positions abfragen des spielers

If spielerx# < 0 Then spielerx# = 0

If spielerx# > 320 - ImageWidth(spieler) Then spielerx# = 320 - ImageWidth(spieler)


If spielery# < 0 Then spielery# = 0

If spielery# > 240 - ImageHeight(spieler) Then spielery# = 240 - ImageHeight(spieler)







;spieler kann mit taste a bomben legen


If KeyHit(30) Then

bombe.TBombe = New TBombe
bombe\bild = LoadImage ("bombe.bmp")
MaskImage bombe\bild,0,0,255
bombe\boom = LoadAnimImage ("boom.bmp",200,200,0,10)
bombe\xb = spielerx#
bombe\yb = spielery#

bombe\timer = 100

DrawImage bombe\bild,bombe\xb,bombe\yb

EndIf




;bombe explodiert wenn der timer auf 0 ist

For bombe.TBombe = Each TBombe

bombe\timer = bombe\timer - 1

DrawImage bombe\bild ,bombe\xb,bombe\yb

Next


For bombe.TBombe = Each TBombe

If bombe\timer = 0 Then

;spiele sound

PlaySound boom

For i = 0 To 9

Cls

DrawImage bombe\boom,bombe\xb - 100,bombe\yb-100,i

; spieler wird gezeichnet damit er beim der explosion nicht verschwindet

DrawImage spieler,spielerx#,spielery#


Flip

Delay 50

Next

Delete bombe.TBombe

EndIf

Next




DrawImage spieler,spielerx#,spielery#


Flip

Until KeyHit(1)


~EDITIERT~

CodeTags hinzugefügt.
MfG BladeRunner

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 19, 2006 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, eine 320x240er Auflösung, erinnert mich ein bisschen an alte Zeiten. Very Happy

Das Problem mit der Explosion könntest du so ähnlich wie mit dem Timer der Bomben, nachdem sie abgelegt worden sind, lösen. Jetzt hast du ja eine zweite For-Each-Schleife mit einem Delay drine!!! Das macht die Animation dann langsam. Du könntest zB eine weitere Type-Variable dafür verwenden, die angibt, welche Animation (tickende Bombenanimation, explosions Animation) grad für jede Bombe abgespielt werden soll. Da eine Animation aber meist nicht so viele Animationsbilder hat wie es Frames im Spiel gibt, müsstest du es wieder mit einer Timervariable machen, die du dann zB durch 50 teilst, um die Animation 'langsamer' abzuspielen, als es FPS im Spiel gibt.
Man könnte aber auch die Timervariable zB von -100 bis +100 zählen und dann folgendes machen. Jede Typevariable dann bombe\timer=bombe\timer+1. Ist bombe\timer <0 dann liegende Bombe zeichnen. Ist bombe\timer >0 dann Explosionsanimation zeichnen.

zB so:Code: [AUSKLAPPEN]
For bombe.TBombe = Each TBombe
 bombe\timer = bombe\timer + 1
 If bombe\timer > 100 Then
  Delete bombe.TBombe
 Else If bombe\timer <0 Then
  DrawImage bombe,bombe\xb,bombe\yb,[i]Frame für liegene Bombe[/i]
 Else
  DrawImage bombe,bombe\xb,bombe\yb,[i]bombe\timer/10 (berechnetes Frame für Animation)[/i]
 End If
Next

Bitte Codetags benutzen, um Code besser erkennbar zu machen.
 

Dark Coder

BeitragMi, Apr 19, 2006 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich steh ebend auf die alte old school auflösung hrhr Wink


Aber danke für deine andwort nur ich habs mir bischen so angeschaut und bekomm koppschmerzen nicht weil du es falsch geschrieben hast nur ich rafs net so ganz Sad mag sein das ich blöd bin (ist auch so *GG*) aber kanns mir das vielleicht noch anders erklären vielleicht auf ne andere art und weise? so das die animation langsam abgespielt wird und dabei auch noch das prog noch stabil ist? weil wenn da 20 explosionen sind dann hab ich bestimmt nen super zeitraffer *G* so wie ich das code *G*

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 19, 2006 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich versuch's. Very Happy Zuerst hattest du ja jeder neu erstellten Bombe ein Timer (bombe\timer) mitgegeben, mit einem Wert von 100. Diese hast du dann bei jedem Schleifendurchlauf um 1 verringert. Wenn Wert =0 war, dann hast du das Type gelöscht und eine Explosionsanimation gezeichnet. So oder so ähmlich war es doch?!? Mein Codevorschlag hat die Timervariable gleichzeitig dazu genutzt, um eine Explosionsanimation zu animieren. Dazu bräuchtest du natürlich im Bild 'bombe' Animationssequenzen die du per LoadAnimImage geladen hast (es können sich sowohl die Explosionsanimationsbilder als auch die liegende oder tickende Bombe drin aufhalten). Um die Animation nicht in Zeittraffer zu zeichnen, habe ich folgendes gemacht. Ich bin davon ausgegangen, daß sich 10 Explosionsanimationsbilder drin befinden. Somit habe ich Timer von 0 bis 100 (hier ist mir ein Fehler unterlaufen, es müsste 0 bis 90 sein) weiter laufen lassen und den Timerwert /10 geteilt. Daturch würde nur jeder 10te Schleifendurchlauf das nächste Frame ansteuern (Frame=bombe\timer/10).

Also die Idee ist einfach nur. Timer kleiner als 0 ist die Warteposition, wo die Bombe einfach nur da rum liegt und wartet bis sie explodiert (ein Startwert von bombe\timer=-200 würde längere Wartezeiten hervobringen). Die Explosionssequenz läuft dagegen immer gleich schnell ab (bombe\timer größer als 0 bis +100). Willst du zB eine längere Animationssequenz für die Explosion, dann lasse die Zahl einfach bis +450 zählen und teile diesen Wert durch eine Zahl der Frames die du im Image bombe drin hast. zB DrawImage bombe,bombe\xb,bombe\yb,bombe\timer/50 50=450 Animationsbilder / 9 Maxframe vom Bild

Ich sehe grad auch: Lade das Animationsbild nur einmal vor der Hauptschleife und lasse sie dann nur noch einzeichnen!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group