frame bzw. Xpos problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

petecoolbelab

Betreff: frame bzw. Xpos problem

BeitragSa, Mai 17, 2008 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
Wenn ich vor gehe mit dem mänchen, funzt es ganz normal, wenn ich aber zurück und dann nach vorne gehe, funktioniert es nicht mehr. Woran liegt das?

Hier meine Hauptschleife:
Code: [AUSKLAPPEN]
Repeat
  Cls
   
   MilliSecs()
   
   
   
   
   DrawImage Map1, 1, 1; Hintergrund zeichnen
   
   DrawImage Man, Xpos, 360, frame ; Männchen Zeichnen
   
   Text 0,0, millisecstotime(MilliSecs()-startzeit)
   
   DrawImage Kaestchen, KXpos, KYpos
   
   KXpos = 300
   KYpos = 400
   
     If "DrawImage Kaestchen" Then
     kzaehler = kzaehler + 1
     EndIf
   
     If kzaeler = 1 Then
     KXpos = 400 And KYpos = 300
     EndIf
   
   
   Text 0,0, millisecstotime(MilliSecs()-startzeit)
   
   If MKYpos > KYpos And Xpos = 240 Then
   ypg = 1
   ElseIf MKYpos < KYpos Then
   ypg = 0
   EndIf
   
   If zeit3 + 50 < MilliSecs() And  fr = 1 Or 0 Then
      zeit3 = MilliSecs()
   fr = fr +1
   EndIf
   
   If fr = 2 And Hitt > MilliSecs() Then
      Hitt = MilliSecs() + 1000
   fr =2
   EndIf
   
   If Ypos < 400 Then
   Ypos = Ypos + 1
   EndIf
   
   If Ypos = 399 Then
   Ypos = 401
   EndIf
   
      
   If Ypos > 400 Then
   Ypos = Ypos
   EndIf
   
   If Ypos < 2 Then
   DrawImage Pfeil1, 310, Ypos
   EndIf
            
   If KeyDown(205) And zeit + 100 < MilliSecs() Then ; Figur geht nach vorne und wenn frame=5 dann frame=1
      zeit = MilliSecs()
   frame = frame + 1
   If frame = 5 Then frame = 1
   EndIf
   
   DrawImage Pfeil1, 310, Pfeilypos
   
   
   If KeyDown(203) And zeit + 100 < MilliSecs() Then ; wenn <- dann figur geht
      zeit = MilliSecs()
   frame = frame + 1
   If frame = 10 Then frame = 6
   EndIf
   
   
   If Dauer = 1000 Then
   DrawImage K1, 640, 310
   EndIf
   
   Include "IFs3.bb"
   
   If Xpos > 640 Then
   Xpos = 1
   EndIf
   
   If Xpos < 0 Then
   Xpos = 640
   EndIf
 
  Flip

The_Nici

BeitragSa, Mai 17, 2008 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If "DrawImage Kaestchen" Then

Danke, das brachte mir heute den tollen "WTF"-Effekt. Wink

Was soll das genau bewirken? Kommentier bitte deinen Code.

Rone

BeitragSa, Mai 17, 2008 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
was hat das
Code: [AUSKLAPPEN]
 Include "IFs3.bb"

in deiner Hauptschleife verloren?

Mich wundert, dass sich dein Männchen überhaupt bewegt, schließlich veränderst du soweit ich gesehen habe 'Xpos' nicht in dem geposteten code..

The_Nici

BeitragSa, Mai 17, 2008 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Includes dürfen in der Hauptschleife sein, Rone, die werden nur beim Kompilieren beachtet.
 

petecoolbelab

BeitragSa, Mai 17, 2008 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das If "Drawimage kaestchen" könnt ihr vergessen. auch wenn ich es lösche, pasiert das gleiche.

ToeB

BeitragSo, Mai 18, 2008 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein es macht keinen SINN !

Code: [AUSKLAPPEN]
IF bedingung = erfüllt then anweisung

IF prüft ob ein wert = 1 ist (also wenn man schriebt wert = 5 und der wert ist gleich 5 dann gibt es 1 zurück sonst null.), bei deinem beispiel ist "DrawImage bla,x,y" then ... ist es ja immer 0...


mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

F

BeitragSo, Mai 18, 2008 11:15
Antworten mit Zitat
Benutzer-Profile anzeigen
IF : https://www.blitzforum.de/help/If
DrawIMage : https://www.blitzforum.de/help/DrawImage
Signatur? Noch nie Gehört...
 

petecoolbelab

BeitragSo, Mai 18, 2008 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das is egal. Ich will aber wissen, was an dem Code sonst noch falsch ist.

The_Nici

BeitragSo, Mai 18, 2008 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Fang nochmals neu an. Der Code sieht aus wie zusammenkopiert, er ist schlecht eingerückt, das meiste mit Leerzeichen. Grausig.
 

petecoolbelab

BeitragSo, Mai 18, 2008 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja,
kann man es trotzdem auch so lösen?

garret

BeitragSo, Mai 18, 2008 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, könnte man. Mit viel Umschreiben.

Also schreib deinen Code besser neu, so hart es klingt (nämlich nach Arbeit). Bei der Gelegenheit kannst du ihn sinnvoll gliedern und kommentieren.

Obwohl ich glaube, dass du mit dem Code weitermachen würdest, wenn wir dir die Fehler in der jetzigen Version nur aufzeigen, hier ein kurzer Abriss einiger Dinge, die falsch sind:

Code: [AUSKLAPPEN]

Millisecs()


allein ist sinnlos, da Millisecs() eine Funktion ist (= Werte zurückgibt). Du weist keiner Variable diesen Funktionswert zu.

Code: [AUSKLAPPEN]

     If kzaeler = 1 Then
     KXpos = 400 And KYpos = 300
     EndIf


funktioniert nicht, aus folgenden Gründen:
1. In kzaehler fehlt das "h"
2. Du kannst 2 Variablen nicht gleichzeitig durch AND Werte zuweisen, da AND ein logischer Operator ist, der nur für Abfragen verwendet werden kann. Also If A=1 AND B=1 Then (Anweisung).

Wenn du zwei Variablen Werte zuweisen willst, musst du das nacheinander machen:
Code: [AUSKLAPPEN]

If X = 1 And Y = 2
  A=1
  B=1
EndIf


Zu dem Problem mit dem Vor- und Zurückgehen:
Code: [AUSKLAPPEN]

   If KeyDown(205) And zeit + 100 < MilliSecs() Then; Bedingung A
      zeit = MilliSecs(); Befehl A
   EndIf

[...]
   
   If KeyDown(203) And zeit + 100 < MilliSecs() Then ; Bedingung B
      zeit = MilliSecs()
   EndIf


Ich hab deinen Code mal kommentiert und für die Erklärung Unwichtiges entfernt, das heißt nicht dass die entfernten Zeilen falsch sind Wink

Erklärung: In Bedingung A fragst du wie in Bedingung B ab, ob eine Zeitspanne von 100 Millisekunden verstrichen ist. Das ist ja in Ordnung, aber dadurch, dass du in der ersten Abfrage diesen Wert zurücksetzt (Befehl A), kann bei Abfrage B diese Spanne nur erreicht werden, wenn unmittelbar vorher (sprich: innerhalb von 100 ms) nicht die andere Taste gedrückt wurde.

Unkompliziert erklärt: Tastenabfrage und Zeitspanne in A erfüllt, Zeitvariable wird zurückgesetzt -> Tastenabfrage in B erfüllt, Zeitspanne aufgrund der zurückgesetzten Zeitspanne nicht -> Block B nicht ausgeführt

Idea
Also klammerst du die Zeitspanne am Besten um die Tastenabfragen:

Code: [AUSKLAPPEN]

If zeit + 100 < MilliSecs()

If KeyDown(203)
 (Befehle)
 zeit = MilliSecs();
EndIf

If KeyDown(205)
 (Befehle)
 zeit = MilliSecs();
EndIf

EndIf


MfG, garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group