Mein Sternen Typ
Übersicht

![]() |
Raiden93Betreff: Mein Sternen Typ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey ich habe zum Lernen von Types ein kleines Sternen Feld machen wollen das Funktioniert soweit auch nur habe ich nicht mehr als 10 Sterne sondern es Spawnen einfach immer mehr?
Code: [AUSKLAPPEN] AppTitle "Neuer Test"
Graphics 800,600,32,2 SetBuffer BackBuffer() Type SterneTyp Field X#,Y#,Speed# End Type Global Sterne.SterneTyp Repeat Cls SterneFUNK() Flip 0 Until KeyHit(1) Function SterneFUNK() For i=1 To 10 Sterne=New SterneTyp Sterne\X# = Rand(1,800) Sterne\Y# = Rand(1,800) Next For Sterne=Each SterneTyp Oval Sterne\X#,Sterne\Y#,3,3 Next End Function |
||
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein Wunder, du fürst "SterneFunc()" bei jedem schleifendurchlauf erneut aus, d.h. bei 60 Frames per Secound hast du pro Sekunde 60*10 Sterne erstellt ![]() Schreib SterneFunc() vor die Schleife =) |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Dice of Darkness |
![]() Antworten mit Zitat ![]() |
---|---|---|
1) Ich weiß nicht, ob es funktioniert, wenn man die Feldeinträge mit Komma getrennt, hintereinander schreibt. Ich würde es sicherheitshalber so machen:
Code: [AUSKLAPPEN] Type SterneTyp
Field X# Field Y# Field Speed# End Type 2) "Sterne.SterneTyp" ist der Objektname der einzelnen Stern-Instanzen. Das heißt, es ist nicht eine Variable im klassischen Sinne, sondern ein Name für mehrere Objekte, die von einem Type erzeugt werden. Deshalb brauchst du es nicht als Global zu definieren. 3) Zum eigentlichen Problem hat Lunatix schon das richtige gesagt: Wenn du die Funktion innerhalb der Hauptschleife ausführst, werden pro Sekunde hunderte neue Sterne erzeugt. Du könntest es zum Beispiel so umschreiben, dass jedesmal, wenn du die Leertaste (oder sonstwas) drückst, neue Sterne entstehen und die alten gelöscht werden. Außerdem würde ich das Zeichnen der Sterne in eine separate Function packen: Code: [AUSKLAPPEN] AppTitle "Neuer Test"
Graphics 800,600,32,2 SetBuffer BackBuffer() Type SterneTyp Field X# Field Y# Field Speed# End Type Repeat If KeyHit(57) Then ;wenn die Leertaste gedrueckt wird Cls() ;loesche den Bildschirm (alte Sterne) LoescheSterne() ;loesche die Instanzen der alten Sterne SterneFUNK() ;erzeuge neue Sterne EndIf MaleSterne() ;zeichne die Ovals für die Stern-Instanzen Flip 0 Until KeyHit(1) Function SterneFUNK() For i=1 To 10 Sterne.SterneTyp=New SterneTyp Sterne\X# = Rand(1,800) Sterne\Y# = Rand(1,800) Next End Function Function MaleSterne() For Sterne.SterneTyp=Each SterneTyp Oval Sterne\X#,Sterne\Y#,3,3 Next End Function Function LoescheSterne() For Sterne.SterneTyp = Each SterneTyp Delete Sterne.SterneTyp Next End Function Ich hoffe, du kannst damit etwas anfangen und damit weiter arbeiten. MfG, Dice of Darkness |
||
Gratis Spiele, Musik, Tools |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich habe es ein wenig anders gemacht ich hasse es wenn ich z.b nur Sterne machen will ganz viele Funktionen dafür machen zu müssen da kommentiere ich es lieber aus^^ guckt mal bitte über mein code und gebt mir Tipps was ich verbessern könnte eurer Meinung nach.
Und ein Tipp auch für Dice of Darkness du kannst es auch hinter einem Komma weiter schreiben habe ich aus Midimasters TuT. Code: [AUSKLAPPEN] AppTitle "Sterne Test"
Graphics 800,600,32,2 SetBuffer BackBuffer() Type SterneTyp Field X# ,Y# ,Speed# ;Bewegung End Type Global Sterne.SterneTyp Global Start = True Repeat Cls() If Start = True ;Sorgt dafür das die Function SterneFUNK nur 1 mal dürchläuft Start = False SterneFUNK() ;Löscht und erstellt die Sterne EndIf MaleSterne() ;zeichne die Ovals für die Stern-Instanzen Flip 0 Until KeyHit(1) Function SterneFUNK() For Sterne.SterneTyp = Each SterneTyp Delete Sterne.SterneTyp Next Local i For i=1 To 80 Sterne.SterneTyp=New SterneTyp Sterne\X# = Rand(1,800) Sterne\Y# = Rand(1,600) Next End Function Function MaleSterne() For Sterne.SterneTyp=Each SterneTyp Oval Sterne\X#,Sterne\Y#,3,3 Sterne\X# = Sterne\X# -0.1 If Sterne\X# <0 Delete Sterne Sterne.SterneTyp=New SterneTyp Sterne\X# = Rand(800,800) Sterne\Y# = Rand(1,600) End If Next End Function |
||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest SterneFUNK auch einfach vor die Schleife packen und den Variablenkram weglassen. Aber an sich ist es schon die richtige Methode wenn man etwas nur einmal tun möchte.
Außerdem brauchst du Sterne wie Dice of Darkness schon gesagt hat nicht als Global zu definieren. Guck dir Mal dieses Type-Beispiel an: Code: [AUSKLAPPEN] Local a.TDings=New TDings
a\einText="Kartoffel" a=New TDings a\einText="Möhre" Local b.TDings For b = Each TDings Print b\einText Next Type TDings Field einText$ End Type Vielleicht hilft es dir weiter. |
||
1 ist ungefähr 3 |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe die Sterne in meinem Spiel eingebaut und muss leider Feststellen das die Sterne über 1200 FPS weg ziehen gibt es keine Möglichkeit Sterne zu machen die weniger FPS ziehen? | ||
![]() |
Dice of Darkness |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso FPS "wegziehen"? Ist doch umso besser, wenn du eine hohe FPS-Rate hast, das zeigt zumindest dass dein Programm nicht besonders ressourcen-aufwendig ist^^.
Ne Spaß beiseite, um die FPS zu begrenzen nimmst du einfach einen Timer und packst den Befehl WaitTimer in die Hauptschleife. Allerdings wirkt sich der Timer dann natürlich auch auf das gesamte Programm aus (also wenn du zum Beispiel noch eine Funktion hast, wo der Spieler bei Tastendruck in eine Richtung läuft, dann wird er mit begrenztem Timer langsamer laufen und du musst eventuell die "Beschleunigung" anpassen). |
||
Gratis Spiele, Musik, Tools |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das habe ich ja schon gemacht habe den Timer nur kurz abgeschaltet damit ich sehe wie viel FPS mein Spiel Unbegrenzt hat damit ich gucken kann wie viel FPS bei eingeschalteten Sternen ich habe und bei abgeschalteten.
Und bei Eingeschalteten habe ich 1200FPS weniger. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zeichnest du Ovals? Die sind super langsam, weil recht komplexe Form. Zeichne vll. lieber eine Auswahl an Bildern.
Braucht es wirklich individuelle Sterne? Zeichne lieber eine kachelbares Bild mit Sternen darauf ![]() ![]() ![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok so in der Art habe ich mir das wohl schon gedacht naja so kann ich die Sterne wenigstens beliebig ändern. | ||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie kriege ich den mit TileBlock hin das die Sterne nicht gleich auftauchen sondern zufällig an einer Stelle ?
Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
SetBuffer BackBuffer() Global gfxBall = LoadImage("GFX\Stern.bmp") Global test# Repeat Cls TileBlock gfxBall,test,0 test# = test# +0.3 Flip 0 Until KeyHit(1) |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Bild wiederholt sich logischerweise alle n * Breite Pixel. test# sollte also einen zufälligen Wert zwischen 0 und Breite erhalten. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm egal was für werte ich ihm auch gebe es bleibt gleich.
Code: [AUSKLAPPEN] Graphics 800, 600, 32, 2
SetBuffer BackBuffer() Global gfxBall = LoadImage("GFX\Stern.bmp") Global test# Repeat Cls TileBlock gfxBall,test#,500 test# = Rnd(0.1,2) Flip 0 Until KeyHit(1) |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du setzt die X Variable auf Werte zwischen 0 und 2 Pixeln. Das ist vermutlich verdammt schwer zu sehen. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das einzige was sich hier ändert ist das das Bild weiter von links nach Rechts rutscht ich brauche aber Pausen in der Grafik so das es wie mein alter Code aussieht nur halt mit Bilder währe da nicht Types besser nur halt mit Bildern? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe die Befehle in der OH verlinkt - hast du nicht nachgelesen wie sie funktionieren, oder ist die Beschreibung da Unklar?
Wenn du es anders haben willst - mach es anders. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dieser Grafikbefehl wird auf den kompletten Grafikbereich angewendet. Dabei wird der Grafikbereich mit einem Bild texturiert. Das heißt: das Bild wird solange wiederholt nebeneinander gezeichnet, bis der komplette Grafikbereich gefüllt ist
Ich habe mir es vorhin schon durchgelesen aber ich brauche ja Einzelne Bilder die nicht hintereinander gemalt werden sondern sollen die Bilder Vereinzelt gemalt werden. EDIT: Ich habe es jetzt so gemacht. Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() Type SterneTyp Field X#, Y#, Speed# End Type Global Sterne.SterneTyp Global bild = LoadImage ("GFX/Stern.bmp") For i=1 To 10 Sterne.SterneTyp = New SterneTyp Sterne\X# = Rnd(1,800) Sterne\Y# = Rnd(1,600) Sterne\Speed# = Rnd(0.05,0.2) Next Repeat Cls For Sterne.SterneTyp = Each SterneTyp Sterne\X# = Sterne\X# +Sterne\Speed# DrawImage bild,Sterne\X#,Sterne\Y# Next For Sterne.SterneTyp = Each SterneTyp If Sterne\X# > 850 Sterne\X# = -50 End If Next Flip 0 Until KeyHit(1) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group