KeyHit problem

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen

PhillipB

BeitragMo, Feb 14, 2011 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie auch aus meinem code zu lesen ist soll er immer wieder aus und an gehen!
Daher bei mir mit millisec Wink

Xeres

Moderator

BeitragMo, Feb 14, 2011 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, aus deinem Code ist zu lesen...
Code: [AUSKLAPPEN]
If MilliSecs()>=ms+1000 And blinkerrechtsstatus=1 Then
...das der Blinker nach einer bestimmten zeit wieder aus geht... Ich stell solche Fragen nicht umsonst, und ich bitte dich auch nicht umsonst klar zu stellen, was du möchtest; Aus Code der "nicht funktioniert" kann ich eben nicht ablesen, was deine Intention ist, oder? Der Code, tut, was da steht. Wenn du nicht erklärst, was du stattdessen möchtest - ich hab das Gefühl mich zu wiederholen - kann man dir nicht helfen.

PseudoCode: [AUSKLAPPEN]
Wenn Zeit um Dann
- Ändere Status
-Wenn Status... Dann
--neue Textur
-Wenn aber Status ... Dann
--neue Textur
-EndeWenn
EndeWenn
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Lapiz

BeitragMo, Feb 14, 2011 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann mach es doch so:
Code: [AUSKLAPPEN]
If KeyHit(57) then Hilfsvariable= 1-Hilfsvariable

Das benutzt du um den Blinker an und aus zu schalten.

Code: [AUSKLAPPEN]
If Hilfsvariable=1
If blinkerrechtsstatus=1
  ändere Textur
  Zeit zurücksetzen
Elseif blinkerrechtsstatus=0
  ändere Textur
  Zeit zurücksetzen
Endif
Endif

Hier fragst du erst ab, ob der Blinker eingeschaltet ist (Hilfsvariable=1) und schaust dann welchen Wert blinkerrechtsstatus hat.

Dann musst du nur noch abfragen ob die richtige Zeit vergangen ist und dann blinkerrechtsstatus
auf den jeweils anderen Wert setzen.

PhillipB

BeitragMo, Feb 14, 2011 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie baue ich dann die Zeit ein?
 

Lapiz

BeitragMo, Feb 14, 2011 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hattest du doch schon in deinen vorherigen Posts mit Millisecs() und ms gemacht.#
Du musst nur fragen wann die richtige Zeit vergagnen ist.
Benutze als Varibable dafür am besten weiterhin ms.

PhillipB

BeitragMo, Feb 14, 2011 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
So ganz klapps ned!
Wie würdest du des machen!
 

Lapiz

BeitragMo, Feb 14, 2011 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte dir jetzt nicht den gesamten Code schreiben.
Wenn du mir sagst was du schon hast oder was nicht funktioniert kann ich oder jemand anderes dir eventuell helfen.

Midimaster

BeitragMo, Feb 14, 2011 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
da gibt es von mir ein Tutorial zu Timer() und Millisecs()

https://www.blitzforum.de/foru...hp?t=34436

...und darin auch ein Beispiel zum Blinken, hier etwas abgewandelt:
BlitzBasic: [AUSKLAPPEN]
Repeat
Cls
If BlinkFlag=1 Then
Rect 120,220,15,15
EndIf

If BlinkTimer<MilliSecs()
If BlinkFlag=1 Then
BlinkFlag=0
Else
BlinkFlag=1
EndIf
BlinkTimer=MilliSecs()+300
EndIf
Flip
Until KeyHit(1)


Vielleicht kannst Du was daraus lernen?

PhillipB

BeitragMo, Feb 14, 2011 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab das jetzt so gelöst doch dann kommt immer Endif without if
Oder sollte ich das anders machen?
Oder habe ich iwas vergessen?
Code: [AUSKLAPPEN]
     If KeyHit(52) Then Blikerrechts=1- Blikerrechts
    EndIf
    If Blikerrechts=1 Then
     If BlinkFlag=1 Then
          EntityTexture Blinkerrechts,Blinkeran
     EndIf

   If BlinkFlag=0 Then
          EntityTexture Blinkerrechts,Blinkeraus
     EndIf

     If BlinkTimer<MilliSecs()
           If BlinkFlag=1 Then
              BlinkFlag=0
           Else
              BlinkFlag=1
                EndIf
           BlinkTimer=MilliSecs()+300
      EndIf
EndIf
 

primero

BeitragMo, Feb 14, 2011 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Erste Zeile hat einen Fehler.

Wenn du die Follgen der If-Bedingung in der selben Zeile schreibst wird kein "Endif" erwartet, d.h. du hast momentan ein endif zuviel.

wenn du die Schleife der Übersichtlichkeit wegen immer mit endif beenden willst, solltest du nach der If-bedingung eine neue Zeile beginnen.

BladeRunner

Moderator

BeitragMo, Feb 14, 2011 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du "Endif without if" oder "expecting ..."-Fehler bekommst würde ich Dir einfach mal raten Deinen Code sauber einzurücken, d.h. jedem If sein endif zuzuordnen, jedem While sein wend etc. Dann siehst Du recht flott wo der Fehler liegt.
Das ist Arbeit die Du selbst tun musst, denn nur so lernst Du deinen Code sauber zu strukturieren.
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

Midimaster

BeitragMo, Feb 14, 2011 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du eine IF-Konstruktion in eine einzige Zeile schreibst, wie in deiner 1. Zeile...

BlitzBasic: [AUSKLAPPEN]
     If KeyHit(52) Then Blikerrechts=1- Blikerrechts


...dann braucht es dafür keine ENDIF mehr in Zeile 2!

Um solche Fehler zu vermeiden, rate ich immer zu dieser Schreibweise:

BlitzBasic: [AUSKLAPPEN]
If KeyHit(52) Then
Blikerrechts=1- Blikerrechts
EndIf


Auch hierfür habe ich ein nettes Tutorial geschrieben, das "Fehler suchen"-Tutorial:

https://www.blitzforum.de/foru...hp?t=33510

PhillipB

BeitragMo, Feb 14, 2011 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke aber iwo fehlt wieder ein if
Doch ich sehe es nicht!
Code: [AUSKLAPPEN]
    If KeyHit(52)
      Then Blikerrechts=1- Blikerrechts
    EndIf
    If Blikerrechts=1 Then
     If BlinkFlag=1 Then
          EntityTexture Blinkerrechts,Blinkeran
     EndIf

   If BlinkFlag=0 Then
          EntityTexture Blinkerrechts,Blinkeraus
     EndIf

     If BlinkTimer<MilliSecs()
           If BlinkFlag=1 Then
              BlinkFlag=0
           Else
              BlinkFlag=1
                EndIf
           BlinkTimer=MilliSecs()+300
      EndIf
EndIf

BladeRunner

Moderator

BeitragMo, Feb 14, 2011 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein letztes mal: Rücke deinen Code sorgfältig ein, dann siehst Du deine Fehler.
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
 

Toasty

BeitragMo, Feb 14, 2011 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei If Blikerrechts=1 Then ist das...

PS:
Versuch das mal übersichtlicher zu machen Wink
Z.B. So:
Code: [AUSKLAPPEN]
If Blikerrechts=1 Then
   ;Tu das
EndIf


Immer ein Tab dazwischen lassen
@AMD Phenom BE X4 2,5Ghz(Overclocked 2,61Ghz); 4GB DDR2; 512MB nVidia GeForce 8400gs; Win7 Home Premium 64bit
Lua for President!

PhillipB

BeitragMo, Feb 14, 2011 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das habe ich doch getan!

BladeRunner

Moderator

BeitragMo, Feb 14, 2011 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du es korrekt getan hättest, was (wie man an deinem geposteten Code ja sehen kann) nicht geschehen ist, hättest Du ja keinen Fehler.
Versuch doch bitte nicht Fakten wegzudiskutieren.
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
 

primero

BeitragMo, Feb 14, 2011 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
in dem Teil deines Codes den du gepostet hast stimmen alle if's - mengen. Der Fehler muss in einem anderen Teil des Codes liegen.

PhillipB

BeitragMo, Feb 14, 2011 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja die habe ich auch schon angeguckt und gesehen das alle Ifs da waren der einzigste Fehler lag daran das:
Code: [AUSKLAPPEN]
If KeyHit(52) [b]Then[/b]
    Blikerrechts=1- Blikerrechts
EndIf
    If Blikerrechts=1 Then
     If BlinkFlag=1 Then
          EntityTexture Blinkerrechts,Blinkeran
     EndIf

   If BlinkFlag=0 Then
          EntityTexture Blinkerrechts,Blinkeraus
     EndIf

     If BlinkTimer<MilliSecs()
           If BlinkFlag=1 Then
              BlinkFlag=0
           Else
              BlinkFlag=1
                EndIf
           BlinkTimer=MilliSecs()+500
      EndIf
EndIf

Das das Markierte Then eine zeile Tiefer stand!

Jetzt geht der Blinker einwandfrei
Ich danke allen die mir geholfen haben!
Besonders Midimaster für seine guten tutorials!
DANKE!

mfg
PhillipB.

hazumu-kun

BeitragMo, Feb 14, 2011 22:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Gottseidank das midimaster sich einmal im Namen der Community die Mühe dazu gemacht hat.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group