schleifenproblem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

snörkl

Betreff: schleifenproblem

BeitragSo, Nov 05, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, hoffentlich ist das nun im richtigen Bereich, war mir nicht sicher obs in beginnerscorner gehört odre hierhin.
Zu meinem Problem. Ich möchte einen Soldatentrupp mit einer for-while-schleife zeichnen. Vorneweg ein Hauptmann, den ich schon geproggt habe und hintendrein im Gänsemarsch nochn paar andere. Hier mein Code:

Code: [AUSKLAPPEN]

Global tmrwarten=0
Global trooperfrm=0

Global trooperX=-50
Global trooperY=100
Global trooperX2=-100

Graphics 640,480,16,2
;-----------------------------------------------------------------------------
fortsetzen$ = Input("Hi; Möchtest Du das Programm fortsetzen (Y/N)? ")
If fortsetzen$="y" Or "Y"
Delay 1
Else
End
EndIf
 
 
Cls
;-------------------------------------------------------------------------
fortsetzen = Input("Bist du Dir da ganz sicher (Y/N)? ")
If fortsetzen$="y" Or "Y"
Delay 1
Else
End
EndIf
Cls
;--------------------------------------------------------------------------
Print"Dann gebe bitte nun das Passwort ein,"
passwort$=Input("welches du in der Readme gefunden hast: ")
If Not passwort$="begin mission"
Print"Falsch. Please try again!"
Delay 1000
End
EndIf
;-----------------------------------------------------------------------------
Graphics 640,480,16,1
;-------------------------------------------------------------------------------
Cls
SetBuffer BackBuffer()
Color 0,120,0
Text 220,50,"Esc drücken zum beenden"

Flip

Delay 1000
Cls
SetBuffer BackBuffer()
Text 220,0,"Ein normaler Tag..."
Flip
Delay 500
Flip
Text 220,15,"Ein normales Leben..."
Flip
Delay 500
Flip
Text 220,30,"Ein normaler Auftrag..."
Flip
Delay 500
Flip
Text 220,45,"Doch..."
Flip
Delay 700
ClsColor 255,255,255
Cls
Flip
Delay 600
Text 0,300,"AAAAAARRRRGGGGHHHHHHHH!"
Delay 800
ClsColor 0,0,0
Cls
Flip
;--------------------------------------------------------------------------
trooper=LoadAnimImage("trooprunner.png",48.16,56.5,0,12)
trooper2=LoadAnimImage("trooprunner.png",48.16,56.5,0,12)
MaskImage trooper, 126,26,100
MaskImage trooper2,126,26,100
schleife=0


Repeat
 
  If schleife=1
  Text 250,420,"Folgen!"
  EndIf
 
  If schleife= 3
   Text 250,435,"Roger Sir!"
  EndIf
 
 For x=0 To 10
   DrawImage trooper2,trooperx2,troopery,trooperfrm
   x=x+1
   trooperx2=trooperx2-50
  Next
 
 
 DrawImage trooper,trooperx,troopery,trooperfrm
 Delay 100
 
 trooperfrm=trooperfrm+1
 trooperx=trooperx+3
 trooperx2=trooperx2+3

  If trooperfrm=>12
   trooperfrm=0
   schleife=schleife+1
  EndIf

 Flip
 Cls
 

Until schleife=20 Or KeyHit(1)


So^^. Passwort ist begin mission , dürfte net so schwer sein rauszufinden xD

Also, wenn ich nun mit der for-while schleife die Soldaten zeichne, dann werden sie ja nur kurz angezeigt. Dann läuft die repeatschleife durch und ihre x koordinaten werden um drei nach rechts verschoben. Doch nun kommt das Problem. Die for-while schleife läuft nämlich noch mal durch, und deswegen werden die x koordinaten wieder um 50 nach links verschoben, das heißt mit jeder schleife wandern sie um 50 koordinaten ins jenseits hinaus xD.
Aber sie sollen ja immer drei nach rechts laufen, dass ist das problem.

Hoffe ihr habts einigermaßen verstanden,
mfg
Snörkl

die bilddatei ist auf http://www.robsite.de/bbkurs2/08bilderanzeigen.htm zu finden (die 12 soldaten da^^) und muss in trooprunner.png umgenannt werden (die blauen ecken kriegt man mit paint weg, einfach drüber pinseln ).

PSY

BeitragSo, Nov 05, 2006 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

naja da sind noch ne Menge Fehler drin, hier mal vom Codeanfang an:

Arrow Bilder kannst Du nicht einfach umbenennen. Wenn Du aus einem *.gif nen *.png machen willst, musst Du es als *.gif laden und als *.png abspeichern.


Arrow Code: [AUSKLAPPEN]
If fortsetzen$="y" Or "Y"
Delay 1
Else
End
EndIf


geht viel leichter so:

Code: [AUSKLAPPEN]
If fortsetzen$ <> "y" And "Y" Then end


Arrow Die Passworteingabe muss in eine Schleife, ansonsten hat man nur 1 Versuch



Arrow Code: [AUSKLAPPEN]
trooper=LoadAnimImage("trooprunner.png",48.16,56.5,0,12)
trooper2=LoadAnimImage("trooprunner.png",48.16,56.5,0,12)

Da es 2 identische Bilder sind, brauchst Du sie nur einmal zu laden. 46.16 und 56.5 rundet Blitz eh, da es nur "ganze" Pixel gibt Wink

Arrow Code: [AUSKLAPPEN]
For x=0 To 10
   DrawImage trooper2,trooperx2,troopery,trooperfrm
   x=x+1
   trooperx2=trooperx2-50
  Next


x = x + 1 muss raus, wenn Du for x=0 to 10 schreibst, zählt er sowieso hoch. Ausserdem wird mit tropperx2=trooperx2-50 ja bei jedem Schleifendurchlauf die x-Position des 2. Troopers um 50 pixel verschoben, das willst Du ja nicht. Lösung kommt weiter unten.

Arrow Code: [AUSKLAPPEN]
DrawImage trooper,trooperx,troopery,trooperfrm

Hier zeichnen wir auch den 2. Trooper, indem wir einfach denselben befehl nochmal absetzen, aber von trooperx 50 abziehn. Ich habs mal mit 150 gemacht im folgendem Code, damit sie weiter auseinander sind.

Hier ne geänderte Version:
Code: [AUSKLAPPEN]
Global tmrwarten=0
Global trooperfrm=0

Global trooperX=-50
Global trooperY=100
Global trooperX2=-100

Graphics 640,480,16,2
;-----------------------------------------------------------------------------
fortsetzen$ = Input("Hi; Möchtest Du das Programm fortsetzen (Y/N)? ")
If fortsetzen$ <> "y" And "Y" Then end
Cls
;-------------------------------------------------------------------------
fortsetzen = Input("Bist du Dir da ganz sicher (Y/N)? ")
If fortsetzen$<>"y" And "Y" Then end
Cls
;--------------------------------------------------------------------------
Print"Dann gebe bitte nun das Passwort ein,"
passwort$=Input("welches du in der Readme gefunden hast: ")
If Not passwort$="begin mission"
Print"Falsch. Please try again!"
Delay 1000
End
EndIf
;-----------------------------------------------------------------------------
Graphics 640,480,16,1
;-------------------------------------------------------------------------------
Cls
SetBuffer BackBuffer()
Color 0,120,0
Text 220,50,"Esc drücken zum beenden"
Flip
Delay 1000
Cls
Text 220,0,"Ein normaler Tag..."
Flip
Delay 500
Flip
Text 220,15,"Ein normales Leben..."
Flip
Delay 500
Flip
Text 220,30,"Ein normaler Auftrag..."
Flip
Delay 500
Flip
Text 220,45,"Doch..."
Flip
Delay 700
ClsColor 255,255,255
Cls
Flip
Delay 600
Text 0,300,"AAAAAARRRRGGGGHHHHHHHH!"
Delay 800
ClsColor 0,0,0
Cls
Flip
;--------------------------------------------------------------------------
trooper=LoadAnimImage("trooprunner.png",48,56,0,12)
MaskImage trooper, 126,26,100
schleife=0

Repeat
 
     If schleife=1 Then Text 250,420,"Folgen!"
     If schleife= 3 Then Text 250,435,"Roger Sir!"
 
       DrawImage trooper,trooperx,troopery,trooperfrm
       DrawImage trooper,trooperx-150,troopery,trooperfrm
       Delay 100
 
       trooperfrm=trooperfrm+1
       trooperx=trooperx+3
       trooperx2=trooperx2+3

     If trooperfrm=>12
           trooperfrm=0
           schleife=schleife+1
     EndIf

       Flip
       Cls
 
Until schleife=20 Or KeyHit(1)


l8er,
psy
  • Zuletzt bearbeitet von PSY am Mo, Nov 06, 2006 17:19, insgesamt einmal bearbeitet
 

snörkl

BeitragMo, Nov 06, 2006 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ich will ja ganz ehrlich sein Very Happy vielen vielen dank. Du hast mir unglaublich geholfen^^- bin halt noch relativ frisch in bb, deswegen mach ich auch noch viel umständliches zeugs Rolling Eyes ^^. Das mit den verschiedenen Tipps und die Ratschläge zum kürzen haben mir sehr geholfen.
das problem war jetzt nur, dass ich eigentlich mehrere von denen zeichnen wollte. Gibt es nicht noch ne andere lösung mit schleifen oder so, damit ich nicht 10 mal drawimage blabla schreiben muss?

PSY

BeitragMo, Nov 06, 2006 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

kein Thema. Very Happy


Zu Deiner Frage:

Du kannst es folgendermassen in eine Schleife packen:

Code: [AUSKLAPPEN]
For i= 1 To 10
          DrawImage trooper,trooperx-50*i,troopery,trooperfrm
next



Dann laufen fleissig 10 Trooper hintereinander Wink

l8er,
psy
 

snörkl

BeitragMo, Nov 06, 2006 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank- du bist klasse^^

noch ein problem. Wenn ich jetzt eine neue animation mache, dann kommt sie auf der anderen seite wieder raus XD

ungefähr so: Code: [AUSKLAPPEN]

lo------------------Hal


hallo ist mein bild^^
ich weiß das es so was irgendwann schon mal gab, finds aber leider net mehr mit der forumsuche

TheMatrix

BeitragDi, Nov 07, 2006 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal was schnell zusammengecodet Very Happy

Code: [AUSKLAPPEN]

Graphics 640,480,16,2
img = CreateImage(50,50) : SetBuffer ImageBuffer(img) : ClsColor 255,0,0 : Cls : SetBuffer BackBuffer()
  x=500

While Not KeyHit(1)
 Cls
  y = 240
  x = x+1 : w = ImageWidth(img) : h = ImageHeight(img)
  DrawImage img,x,y

  If x+w>640 Then DrawImage img,x-640,y
  If x>640 Then x=x-640
  Delay 10
 Flip
Wend


mfg
°_° °.° °~° °v° .. -.-
 

snörkl

BeitragDi, Nov 07, 2006 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ähm^^- und wie soll ich das jetzt in meinen code einbindn?

TheMatrix

BeitragDi, Nov 07, 2006 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Copy & Paste ! Very Happy
°_° °.° °~° °v° .. -.-

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group