[Gelöst]Funktionen und Timer
Übersicht BlitzBasic Beginners-Corner
Dicker HobbitBetreff: [Gelöst]Funktionen und Timer |
Di, Feb 28, 2012 17:17 Antworten mit Zitat |
|
---|---|---|
Hallo ich bin es mal wieder,
Ich habe ein kleines Problem: Wenn ich eine Animation in der Hauptschleife durchlaufen lasse, dann funktioniert alles wunderbar, aber wenn ich sie dann in eine Funktion packe stimmt die Animation nicht mehr. Danke schon im Vorraus! BlitzBasic: [AUSKLAPPEN]
|
||
- Zuletzt bearbeitet von Dicker Hobbit am Do, März 08, 2012 14:42, insgesamt einmal bearbeitet
XeresModerator |
Di, Feb 28, 2012 17:20 Antworten mit Zitat |
|
---|---|---|
Was bedeutet "stimmt nicht mehr"? Wird vermutlich daran liegen, dass die Variablen nicht Global sind. Wenn du einen Type benutzt, könntest du auch gleich die Timer/Animationsvariablen da hinein verschieben. | ||
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) |
Dicker Hobbit |
Di, Feb 28, 2012 17:28 Antworten mit Zitat |
|
---|---|---|
Es wird nur kurz das 2. Bild angezeigt und dann sofort wieder gewechselt. Das mein ich mit "stimmt nicht mehr"!
Und danke Problem, gelöst ! Edit: Bei mir ist gerade noch ein Fehler entstanden: BlitzBasic: [AUSKLAPPEN]
Wie kann ich umgehen das der spielerframe nicht auf 0 gesetzt wird, wenn eine Taste gedrückt wurde ? (If spielerframe>1 Then spielerframe=0) |
||
Hubsi |
Di, Feb 28, 2012 18:10 Antworten mit Zitat |
|
---|---|---|
BlitzBasic: [AUSKLAPPEN] . So, oder hab ich das falsch verstanden? |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Dicker Hobbit |
Di, Feb 28, 2012 18:24 Antworten mit Zitat |
|
---|---|---|
Ich denke du hast es bestimmt richtig gemacht, aber ich bekomme es nicht auf mein Problem angewendet!
Mein Code nachdem ich deinen Vorschlag ausprobiert habe : BlitzBasic: [AUSKLAPPEN] If MilliSecs()>spielertimer+500 Then Leider bringt dies nicht das gewünschte Ergebnis. (Manchmal ist der Spieler angezeigt, dann wieder nicht usw.) |
||
Addi |
Di, Feb 28, 2012 18:50 Antworten mit Zitat |
|
---|---|---|
Wieviele Frames hat den die Animation
Hab grad ne Idee aber keine IDE Ich komm in 5 mins wieder |
||
Addi |
Di, Feb 28, 2012 19:09 Antworten mit Zitat |
|
---|---|---|
Müsste funktionieren
BlitzBasic: [AUSKLAPPEN]
|
||
LordCoder |
Di, Feb 28, 2012 19:24 Antworten mit Zitat |
|
---|---|---|
Hallo,
1) Ich vermute, du willst eine Spielfigur in 4 Positionen anzeigen lassen? Dann musst du aber frames von 0 bis 3 verwenden.. und nicht bis 4: -> Code: [AUSKLAPPEN] If KeyDown(32) Then DrawImage s\pic, s\x, s\y, 4
macht nicht viel Sinn, falls du nur 4 Bilder hast. Edit: Hat sich erledigt.. also hast du mehr bilder und ich es falsch interpretiert. 2) Allgemein würde ich dir raten, eine globale variable zu definieren, die die etwas über die Richtung aussagt. zB: spielerframe Dann kannst du eine solche funktion machen: Code: [AUSKLAPPEN] Global spielerframe Function math_player() If KeyDown (30) Then spielerframe = 0 ;links Elseif Keydown (31) Then spielerframe = 1;runter Elseif Keydown (32) Then spielerframe = 2 ; rechts Elseif Keydown (28) Then spielerframe = 3 ; rauf Else spielerframe =1 ; runter, wenn keine Taste gedrückt ist. Endif End Function Function draw_player(spielerframe) DrawImage s\pic, s\x, s\y, spielerframe End Function ; vielleicht s\pic, s\x, s\y auch in der Function einlesen? Repeat math_player() draw_player(spielerframe) Flip ;? WaitTimer (timer) Forever Edit: Oder so ähnlich. Ich denke es ist allgemein besser, den zeichnungs-Code vom Mathematik-Code zu trennen, und dann später beide zusammenfügen. Das mit der Zeit würde ich auch direkt im Mainprogram machen. Ich habe hier einfach WaitTimer verwendet, und damit deine selber gefundene Möglichkeit ignoriert. Es geht einfach schneller.. Siehe hier. Hoffe ich konnte dir helfen.. sonst einfach weiterfragen. |
||
3. Platz BCC #60 |
- Zuletzt bearbeitet von LordCoder am Di, Feb 28, 2012 20:42, insgesamt 2-mal bearbeitet
Dicker Hobbit |
Di, Feb 28, 2012 19:38 Antworten mit Zitat |
|
---|---|---|
Ich habe nur 2 Frames um das normale Laufen darzustellen, und die anderen Frames sind jeweils Aktionen die die Figur ausführt!
Mein Problem besteht also darin das, wenn keine Taste gedrückt wurde der Frame 0 und 1 immer "wechseln" sollen. Wenn aber eine Taste gedrückt wird soll kurz das Laufen durch den entsprechenden Frame ersetzt werden Ich hoffe das ich meinen Wunsch nun verständlich erklärt habe . Lg Dicker Hobbit EDIT: Ich habe insgesamt 5 Bilder (also 0-4) 2 Laufframes und 3 Aktionen |
||
Midimaster |
Di, Feb 28, 2012 20:25 Antworten mit Zitat |
|
---|---|---|
Du setzt besser die Zeile mit dem autom. Framewechsel vor die Tastaturabfragen. In den Tastaturabfragen änderst du spielerframe statt zu malen. Und das Malen machst du einmal am Ende. So überschreiben die KeyDowns immer den Wechsel:
BlitzBasic: [AUSKLAPPEN] Global spielerframe%, spielertimer% |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Dicker Hobbit |
Di, Feb 28, 2012 23:32 Antworten mit Zitat |
|
---|---|---|
Hallo ich bin es noch mal zu später Stunde!
Mein Problem: Ich möchte verschiedene Gegner zeichnen und wenn sie zerstört sind sollen neue gezeichnet werden. Leider steht dann bei mir immer "Image does not exist" Danke im Vorraus! BlitzBasic: [AUSKLAPPEN] Function objektezeichnen() |
||
Midimaster |
Di, Feb 28, 2012 23:45 Antworten mit Zitat |
|
---|---|---|
was ist denn aus deinem ersten Problem geworden?
zum 2. Problem... es könnte daran liegen, dass das image nicht existiert... Du malst ja einige Images, aber den Code, wo man sieht wie sie in die TYPEN reingekommen sein sollen, sendest Du nicht. Und auch nicht die Stelle, wo man sieht, wie du sie lädst.... Wie soll da jemand helfen können? Trotzdem mal ein Hilfeversuch: DEBUGGER an, damit du weißt, in welcher Zeile der Fehler auftritt. Teste mit DEBUGLOG unmittelbar nach dem Laden eines jeden Bildes, ob es wirklich gefunden wurde. Teste außerdem unmittelbar nach dem Zuordnen der Bilder zu dem*\pic Fields, ob in den*\pic Field was drin ist. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Dicker Hobbit |
Mi, Feb 29, 2012 15:54 Antworten mit Zitat |
|
---|---|---|
Also das erste Problem habe ich durch deine Hilfe gelöst (Danke nochmal )
Ich habe mein 2.Problem anscheinend nicht richtig erläutert! Die Objekte in den Types zombie, mauer und Fels können gelöscht werden, wenn die entsprechende Taste gedrückt wird und die Objekte mit dem Spieler kollidieren! Wenn alle Types keine Objekte mehr enthalten (BlitzBasic: [AUSKLAPPEN] If First fels = Null And First mauer= Null And First zombie= Null Then), dann sollen wieder neue Felsen, Zombies und Mauern außerhalb des Bildschirmes erstellt werden. BlitzBasic: [AUSKLAPPEN] For i=1 To level*Rand(1,4) Nun erstellt mein Code aber anscheinend keine Gegner mehr wenn, die anderen gelöscht wurden! Ich habe mal deine Anweisungen befolgt : - Der Fehler tritt bei der ersten Kollisionsabfrage auf, nachdem die Objekte gelöscht wurden (BlitzBasic: [AUSKLAPPEN] If ImagesCollide(s\pic, s\x, s\y, spielerframe, z\pic, z\x, z\y, 0 ) Then ...) - Das Programm tritt in die If-Abfrage ein und führt die For-Schleife aus Trotzdem kommt weiter die Fehlermeldung "Image does not exist!" |
||
XeresModerator |
Mi, Feb 29, 2012 17:13 Antworten mit Zitat |
|
---|---|---|
Du erstellst zwar neue Objekte mit einer X-Koordinate, aber du setzt das Bild nicht.
Ich würde auch empfehlen, die Teile mit "New <Type>" je in eine eigene Funktion zu stecken. Es ist sauberer und du kannst dir sicher sein, dass alle Werte korrekt in der Funktion gesetzt werden, wo auch immer du ein neues Objekt erstellst. |
||
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) |
Jamagin |
Mi, Feb 29, 2012 18:04 Antworten mit Zitat |
|
---|---|---|
@Dicker Hobbit
Kannst du mal den ganzen Code einfügen? lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
Dicker Hobbit |
Do, März 01, 2012 15:54 Antworten mit Zitat |
|
---|---|---|
Sicher kein Problem Jamagin!
Für Hinweise an meinem Code bin ich sehr dankbar: BlitzBasic: [AUSKLAPPEN] Graphics 800, 480, 32, 2 @Xeres: Danke, Ich werde es versuchen einzubauen! |
||
XeresModerator |
Do, März 01, 2012 16:15 Antworten mit Zitat |
|
---|---|---|
Hatten wir das nicht erst kürzlich?
BlitzBasic: [AUSKLAPPEN] f\pic=LoadAnimImage("fels.png", 200, 200, 0, 2) 1. Für jedes Objekt das selbe Bild neu zu laden wird sehr schnell den Speicher füllen, bis er überläuft. Benutze dafür eine Globale Bild-Variable und/oder mache eine Zuweisung zu dieser: BlitzBasic: [AUSKLAPPEN] Global Fels_img=LoadAnimImage("fels.png", 200, 200, 0, 2) 2. Da du neuen Objekten gar kein Bild zu weist, gibt es eben die Fehlermeldung... Das hier ist doof: BlitzBasic: [AUSKLAPPEN] Global zombie, mauer, fels Du benutzt schon Types, die exakt so heißen - die musst du nicht Global machen. Das sorgt höchstens für Verwirrung. Schön, dass du begonnen hast, alle Variablen im Spieler-Type zu bündeln - nur solltest du es Einheitlich halten und die Globale zu einem Field machen (genauso wie spielertimer): BlitzBasic: [AUSKLAPPEN] s\leben=3 Beim Objekttimer... BlitzBasic: [AUSKLAPPEN] DrawImage z\pic, z\x, z\y, 1...bin ich mir nicht sicher, was du erreichen willst. Und zu guter Letzt: Timer+Flip(0). Wie gesagt noch ein paar mehr Funktionen verwenden, ansonsten ist es ja schon gut strukturiert. |
||
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) |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group