energie in functionen
Übersicht

![]() |
BlitzproggerBetreff: energie in functionen |
![]() Antworten mit Zitat ![]() |
---|---|---|
zugegeben, der titel ist nicht das wahre und passt auch nicht richtig zum thema, denoch habe ich hier noch ein problem: zuerst mal ein auszug aus meinem code:
Code: [AUSKLAPPEN] Graphics 1280,1024,16,1
SetBuffer BackBuffer() Global ev = LoadImage("energiebalken (v).bmp") Global eh = LoadImage("energiebalken (h).bmp") Global el = LoadImage("energiebalken (l).bmp") Global energie = 2 While Not KeyDown(1) level1 Wend Function level1() While Not KeyDown(1) If KeyHit(57) And energie = 2 Then energie = 1 If KeyHit(57) And energie = 1 Then energie = 0 If energie = 2 Then DrawImage ev, 10, 50 If energie = 1 Then DrawImage eh, 10, 50 If energie = 0 Then DrawImage el, 10, 50 Flip Cls Wend End Function End um eventuelle vorurteile abzuwenden möchte ich noch erwähnen, dass dies blos ein kleiner teil des codes ist. das problem: ist energie = 2 dann kommt das richtige, ist es = 1 auch, aber bei null kommt es nicht richtig. was mache ich falsch? meine freundlichsten grüsse |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach dem auslesen des Tastaturpuffers, wird dieser gelöscht. Mit anderen Worten, wenn zum ersten mal If KeyHit(57) Then ... aufgerufen wird, ist danach der Puffer leer. Daher den Wert zwischenspeichern.
Wir wärs mit folgendem Code: [AUSKLAPPEN] ...
If KeyHit(57) Then If energie>0 Then energie=energie-1 End If ... edit1: Außerdem würde ich es vermeiden, alles als Global zu definieren. Und schaue dir mal Arrays an (siehe dazu ql:Dim). Die lechzen geradezu für deine Vorgehensweise. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für die schnelle antwort. ![]() mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
Shark |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hat sich wohl erledigt.
Sorry |
||
- Zuletzt bearbeitet von Shark am So, März 16, 2008 22:30, insgesamt einmal bearbeitet
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
das musst du dir selber schreiben, siehe dazu Millisecs() | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
milisecs? für mein progg ist es eigentlich unwichtig zu wissen wann der pc gestartet wurde. ich hab mich auch gleich selbst an einem progrämmchen versucht:
Code: [AUSKLAPPEN] global zeit = 0
warum das nicht functioniert ist mir schleierhaft. danke noch für die schnellen antworten function hauptschleife() ... ... if zeit = 3000 and energie<2 then energie = energie + 1 zeit = 0 endif ... ... zeit = zeit + 1 delay 1 ... end function ![]() meine freeundlichsten grüsse |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
der eine NOOB!!! hat Folgendes geschrieben: milisecs? für mein progg ist es eigentlich unwichtig zu wissen wann der pc gestartet wurde. ich hab mich auch gleich selbst an einem progrämmchen versucht:
@skey-z hat schon recht. Natürlich kannst Du auch nach einem bestimmten zeitpunkt etwas ausführen mit Millisecs(). Hier mal ein beispiel: Code: [AUSKLAPPEN] Graphics 640,480
SetBuffer BackBuffer() Global timer = MilliSecs() Global sekunden,leben_auffuellen Repeat Cls ;Jede sekunde ausführen If MilliSecs()-timer >= 1000 Then timer = MilliSecs() ;sekunden um jeweils 1 erhöhen sekunden = sekunden + 1 ;Wenn sekunden >= 10 dann leben_auffuellen auf 1 setzen If sekunden >= 10 Then leben_auffuellen = 1 : sekunden = 0 EndIf If leben_auffuellen = 1 Then ;hier den code um leben aufzufüllen Text 20,20,"Leben wird aufgefüllt!" EndIf Flip Until KeyHit(1) End Ist jetzt nur ein beispiel, natürlich musst du den Code noch bei dir richtig anpassen. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
- Zuletzt bearbeitet von bruce85 am Mo, März 17, 2008 0:50, insgesamt 2-mal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Millisecs zeigt dir zwar die Zeit, seit der Rechner eingeschaltet istm, aber durch zwischenspeichern der Variable, kann man ganz einfach einen Differenzbetrag errechnen. Drei Sekunden wären dann eben 3000 Millisekunden. Dein Programm wird im übrigen auf unterschiedlichen Rechnern auch geringfügig unterschiedlich schnell ablaufen. Daher empfielt es sich eben Millisecs zu nehmen.
Code: [AUSKLAPPEN] Graphics 400,600,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(50) Local MS,Warten1,Warten2 While Not KeyHit(1) Print "bla bla" MS=MilliSecs() If MS>(Warten1+1200) Then Print "Alle 1.2 Sekunden ein Zusatz" Warten1=MS End If If MS>(Warten2+3000) Then Print "Alle 3 Sekunden eine Extrawurst" Warten2=MS End If WaitTimer(Timer) Flip 0 ; Cls Wend End Versuche nach Möglichkeit viele Funktionsaufrufe soweit es geht zu vermeiden. edit1: Da war ich mal zu spät... |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für eure hilfe und geduld das mit dem auffüllen der energie klappt jetzt ![]() mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit dem lösen des einen problems eröffnet sich ein neues: ich habe einen gegner in das spiel gesetzt, den der held töten soll. wenn man nun die leertaste drückt und man in der nähe des feindes ist soll der sterben. das functioniert auch, jedoch nur wenn die energie voll ist ( also auf 2). der gegner soll auch sterben wenn sie auf 1 ist, tut er aber nicht. ich habe nun schon alle mjir eingeffallenen massnahmen ergriffen es zu beheben - jedoch ohne erfolg.
hier mein Code: [AUSKLAPPEN] global feind = 1 function level1() while not keydown(1) kh = keyhit(57) if feind = 1 then drawimage ...... if feind = 0 then drawimage ...... If px<790 And px>610 And py>500 And feind = 1 Then DrawImage te, 590, 200 If energie>0 And kh Then feind = 0 EndIf wend end function das functioniert komischerweise nicht (wenn energie = 1 ist geht da nichts) was ist denn da falsch? mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das hat dann aber kaum was mit dem code zu tun. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
heisst das dieser vorgang kann nicht ausgeführt werden? ![]() mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde die ganze Reihe von Querverweisen durch Variablen recht umständlich und tragen sicherlich nicht zur Einfachheit des Codes bei.
Allein schon Code: [AUSKLAPPEN] if feind = 1 then drawimage ......
if feind = 0 then drawimage ...... und vor allem Code: [AUSKLAPPEN] If energie>0 And kh Then feind = 0
Generell würde ich auf solche Umwälzung der Variablenwerte verzichten und alles soweit es nur geht logisch und direkt regeln. Anstelle if feind = 1 then drawimage würde ich das mit Frames oder wenn es nicht anders geht, mithilfe von Arrays regeln. Das heisst, die Framesangabe ist auch direkt der Feindzstand, oder eben mithilfe eines Dim-Arrays die Bilder einzelnd einladen und über den Index ansprechen. In beiden Fällen sparst du dir die beiden If-Abfragen. Um deinem Problem mal direkt behilflich zu sein, so könnte das Ändern der folgenden Zeile Code: [AUSKLAPPEN] If px<790 And px>610 And py>500 And feind = 1 Then
durch Code: [AUSKLAPPEN] If px<790 And px>610 And py>500 And feind > 0 Then
schon helfen. Da ich aber nicht den ganzen Code habe, kann ich es auch nicht genau sagen. Ich weise aber nochmal darauf hin, dass ich so eine Vorgehensweise für nicht richtig erachte. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Blitzprogger |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich weiss das das ein bischen doof tönt und vielleicht einige nerft, denoch habe ich die frage wie ich das nun anstellen soll ![]() meine allerfreundlichsten grüsse |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du sollst die ganze sache vereinfachen, indem du nicht schreibst
Code: [AUSKLAPPEN] If energie>0 And kh Then feind = 0
If feind=0 Then DrawImage ... Sondern Code: [AUSKLAPPEN] If energie>0 And kh Then DrawImage ...
mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group