arkanoid clon (getroffene steine verschwinden lassen)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

ratzeputz

Betreff: arkanoid clon (getroffene steine verschwinden lassen)

BeitragFr, Okt 23, 2009 9:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen.

Ich bin gerade dabei mich in das Programmieren hineinzuleben und programmiere Ausbildungsbedingt nur mit vb.net und c#.
Ich muss dazu aber erwähnen, dass ich noch in Ausbildung bin und nicht der totale Proggerprofi.

Vor einiger Zeit wurde ich auch auf Blitz aufmerksam und mein erster Pong Clon funktioniert auch einwandfrei. (Blitzprofis würden wahrscheinlich bei dem Spaghetticode die Hände überm Kopf zusammenschlagen aber Codeoptimierung erfolgt für mich erst an zweiter Stelle)

Nun möchte ich gerne einen Arkanoid Clon basteln und einen Ball zu zeichnen, das Spielerrechteck und auch der Winkelalgorithmus und eine Kollisionsabfrage sind kein Problem für mich.

Jedoch stehe ich gerade vor einer kleinen Problematik.
Ich wage mich bedingt durch das Spielprinzip nun an die Types heran. Kann man sich diese Types wie ein Klassenobjekt in vb.net vorstellen oder sehe ich hier das Programmierprinzip komplett falsch?

Meine Überlegung zum Arkanoid Clon wäre einfach ein paar Objekte (types) als Rechteck mit Rect zu erstellen und diese dann oben ins Spielfeld zu zeichnen.
Jedoch fehlt mir hier irgendwie der Denkanstoss. Wie genau muss dies nun gecodet werden?

Vor allem die essentielle Frage wie ich diese Objekte nach einer Kollision mit dem Ball wieder verschwinden lasse bereitet mir Kopfzerbrechen.
Gibt es eine Art Clear oder Delete Befehl der das getroffene Objekt wieder aus dem Speicher und somit auch vom Spielfeld löscht?
Meine Überlegung wär, dem Objekt dann einfach einen Y-Achsen Wert zu geben der das Teil dann ausserhalb des Spielfeldes wieder zeichnet, aber das wäre ja nicht wirklich eine optimale Lösung da es ja Performance kostet.

Könnt ihr mir hier eventuell einen kleinen Anstoss liefern?
Mit der Suche habe ich leider nur einen Beitrag gefunden, wo der Threadersteller sofort angemotzt wurde und da lese ich generell dann nicht mehr weiter.

Edit:
Ich hatte gerade noch eine Idee, aber ob diese funktioniell ist oder vernünftig...man weiss es nicht Smile
Könnte man eventuell ein 2 Dimensionales Array generieren, welches mit 2 verschachtelten For schleifen einfach in jedem Frame Rechtecke speichert. Kann Blitz (hab 3D) eigentlich mehrdimensionale Arrays handlen und vor allem Rechtecke speichern?
Man könnte ja dann einen Boolean für die Kollision nehmen der mir in jedem Rechteck der 2 Dimensionalen Matrix bei einer "Kollision = True" das Rechteck an entsprechender Stelle der Matrix einfach auf einen Wert > Y-Achse des gesamten Feldes setzt.
Oder meint ihr, dass wird so nix?

Midimaster

BeitragFr, Okt 23, 2009 10:10
Antworten mit Zitat
Benutzer-Profile anzeigen
erst unter BlitzMax hast Du Types, die Du mit den Klassen von VB vergleichen kannst. In Blitz3d gibt es nur eine vereinfachte Form, die wohl eher Enumerations entspricht, aber für Dein Problem reichen könnte.

Du kannst innerhalb eines Types jede Art von Variable erstellen, also auch Images oder Entities. Allerdings sind keine Methoden oder Functionen möglich:

Code: [AUSKLAPPEN]

Type SpielSteinTyp
     Field X%
     Field y%
     Field Image
End Type

Dim  Spielstein.SpielSteinTyp(100)
SpielStein(0) = New SpielSteinTyp

SpielStein(0)\X=100
SpielStein(0)\Image=CreateImage(32,32)

DrawImage SpielStein(0)\Image,100,100


Etwas gewöhnungsbedürftig ist die Schreibweise mit den Backslashs

dank der atemberaubenden Geschwindigkeit von BlitzBasic (im Vergleich zu VB) wird typischerweise bei jedem VSync der Bildschirm komplett neu gezeichnet.

Du kannst dann unsichtbare Objekte einfach nciht mehr zeichnen oder sie außerhalb des Bildschirms stellen, was die Performance nicht negativ beeinflusst

BladeRunner

Moderator

BeitragFr, Okt 23, 2009 10:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Types unter BB sind im wesentlichen mit Structs unter C zu vergleichen, d.h. als neuer Datentyp ohne eigene Methoden.
Deine Bricks könntest du also in einem
Type Brick
field x,y,w,h
end type speichern, der für jeden Brick die Koordinaten und Ausdehnung prüft.
Durchlaufen kannst Du das ganze dann mit Each:
for b.brick = each brick, wobei b als bezeichner nach und nach alle Instanzen durchläuft. Es gibt noch Befehle um sich gezielter durch die Types zu steuern, siehe in der Hilfe unter
before,after,first,last.

Löschen einzelner Typeeinträge (welche alle in einer von Blitz verwalteten globalen Liste gespeichert werden) geht per delete.

Bei einem Arcanoid bietet sich ein Array bedingt an - sollen die Bricks bei Kollision einfach verschwinden wäre ein Array aus dessen Koordinaten die Bricksposition berechnet wird kein Problem, willst Du getroffene Bricks animiert runterfallen lassen, geht das zwar auch aber der Type wäre da flexibler, da Du einfach ein Statusfeld für die Animation in ihm definieren kannst.

Mehrdimensionale Arrays erstellst du mit dim bla(x,y,z), wobei x-z die Dimensionen von bla, beginnend bei 0 sind.

Allgemein empfehle ich Dir den Download und das ausführliche Studium der deutschsprachigen Hilfe hier vom Portal.
Desweiteren möchte ich Dir auf den Weg geben Deinen Code von Beginn an zu strukturieren, denn ein nachträgliches optimieren ist schwer bis unmöglich. Erst nachdenken, dann codieren.
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
 

ratzeputz

BeitragFr, Okt 23, 2009 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also zunächst mal danke für die Antworten.
Damit komme ich schon ein wenig weiter.

Ich vergleiche jetzt einfach mal die Types mit den Listen aus VB.Net...so kann ich mir mehr darunter vorstellen.
Dank der Denkanstöße hier kam ich nun zu diesem Schluss Smile
Und noch besser ist, dass ich nun damit auch etwas anfangen kann. Die Syntax ist ja eher das sekundäre Problem wenn man die Logik begriffen hat Smile

Ich denke mit der kleinen Hilfestellung kann ich nun einen Arkanoid Clon basteln Smile

Vielen Dank nochmal

@BladeRunner:
Natürlich du hast Recht, was das strukturieren und so weiter anbelangt.
In VB oder c# kommt mir auch kein Programm ohne ein Ablaufdiagramm und so weiter aus den Fingern. Da ich hier aber die Oberfläche ein wenig übersichtlicher empfinde als in Blitz und gerade die Funktionen des Visual Studios die Programmierung ein wenig erleichtern habe ich mich bei Blitz noch nicht so wirklich aufs "schöne" programmieren versteift sondern eher mal auf das funktionelle.
Zumal man kleine Programme wie z.b. ein Pong oder eben ein Arkanoid noch recht einfach aus dem "Hirn" raus programmieren kann. Zumindest ich sehe mich in der Lage das zu können und dennoch den Überblick zu behalten.
Dafür kommentiere ich aber auch sehr viel

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group