Skript-Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

E. Urbach

ehemals "Basicprogger"

Betreff: Skript-Problem

BeitragSa, Jun 11, 2005 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich hab Blitz3D (last Update) und hab da ein Problem, was bei mir noch nie aufgetreten ist:

Allgemein: Wenn ich kein Delay benutze, wird ein Befehl nicht ausgeführt.
Speziell: Der neue Text wird nicht geschrieben. Wenn ich Delay 1 nach dem Text - Befehl einsetze funktioniert es trotzdem nicht. Nur bei einem Wert ca. > 100.

Ich habe schon oft Skriptsprachen geproggt, aber das ist mal was ganz neues.

Bitte reisst mir nich den Kopf ab wegen der Unübersichtlichkeit und dem Mangel an Kommentaren des Codes, das ist mir schon klar.


Das Skript selbst:
Code: [AUSKLAPPEN]

Window "Test",800,600
newbuffer backbuffer
cls
text 5,5,"Hallo"
flip
waitkey
cls
Text 5,5,"Halloman"
flip
WaitKey
Title "Test-Ende"
WaitKey
end



Hier ist mein Skript-Interpreter:

Code: [AUSKLAPPEN]


Type tVar

 Field Wert, Name$

End Type


Global right_var.tVar = New tVar


Dim AlleZeilen$(1000)


Global befehl$, para1$, para2$, para3$, para4$, para5$, ersteskomma, zweiteskomma, dritteskomma, vierteskomma
Global erstesleer
Global erstesgleich, zeile$, datei, markezahl=-1, variszahl=-1, ruck, paras$, aktuzeile

Global dateiname$=CommandLine()



datei=ReadFile(dateiname$)
If datei=0 RuntimeError "Datei "+dateiname$+" nicht gefunden."



;Lesen
Repeat

AlleZeilen(aktuzeile)=ReadLine(datei)

zeile$=AlleZeilen(aktuzeile)

erstesleer=Instr(zeile$," ")
befehl$=Mid(zeile$,1,erstesleer-1)

para1$=Mid(zeile, erstesleer+1)

erstesgleich=Instr(para1$,"=")

If Left(zeile,1)<>";"
Select Upper$(befehl$)

Case "NEWINT"

variszahl=variszahl+1
Var.tVar = New tVar
Var\Wert = Int( Mid( para1$, erstesgleich+1 ) )
Var\Name$ = Mid( para1$, 1, erstesgleich-1 )

Case "NEWIMAGE"

variszahl=variszahl+1
Var.tVar = New tVar
Var\Wert = LoadImage( NoString(Mid( para1$, erstesgleich+1 )) )
Var\Name$ = Mid( para1$, 1, erstesgleich-1 )


Case "NEWSOUND"

variszahl=variszahl+1
Var.tVar = New tVar
Var\Wert = LoadSound( NoString(Mid( para1$, erstesgleich+1 )) )
Var\Name$ = Mid( para1$, 1, erstesgleich-1 )

End Select
EndIf

aktuzeile=aktuzeile+1
Until Eof(datei)=1
maxzeile=aktuzeile

CloseFile datei



aktuzeile=0

;Ausfuehren
Repeat

DeclareVars()


zeile$=AlleZeilen(aktuzeile)

erstesleer=Instr(zeile$," ")
befehl$=Mid(zeile$,1,erstesleer-1)


If Left(zeile,1)<>";" And Left(zeile,1)<>"" ;And Upper(befehl$)<>"MARK";Wenn kein Kommentar


parameter$=Mid(zeile, erstesleer+1)

If parameter$=befehl$ parameter$=""

ersteskomma=Instr(parameter$,",")
zweiteskomma=Instr(parameter$,",",ersteskomma+1)
dritteskomma=Instr(parameter$,",",zweiteskomma+1)
vierteskomma=Instr(parameter$,",",dritteskomma+1)


;Funktioniert leider nur fuer ein "" - Parameter (Zeichen)
anf_found = Instr(parameter$,Chr(34))
If anf_found
   If anf_found < ersteskomma And ersteskomma < Instr(parameter$,Chr(34),anf_found+1) ersteskomma=0
   If anf_found < zweiteskomma And zweiteskomma < Instr(parameter$,Chr(34),anf_found+1) zweiteskomma=0
   If anf_found < dritteskomma And dritteskomma < Instr(parameter$,Chr(34),anf_found+1) dritteskomma=0
   If anf_found < vierteskomma And vierteskomma < Instr(parameter$,Chr(34),anf_found+1) vierteskomma=0
EndIf

erstesgleich=Instr(parameter$,"=")
erstesgroser=Instr(parameter$,">")
ersteskleiner=Instr(parameter$,"<")

para1$=""
para2$=""
para3$=""
para4$=""
para5$=""





If vierteskomma
para1$=Mid(parameter$, 1, ersteskomma-1)
para2$=Mid(parameter$, ersteskomma+1, zweiteskomma-ersteskomma-1)
para3$=Mid(parameter$, zweiteskomma+1, dritteskomma-zweiteskomma-1)
para4$=Mid(parameter$, dritteskomma+1, vierteskomma-dritteskomma-1)
para5$=Mid(parameter$, vierteskomma+1)

para1$=Decome$(para1$)
para2$=Decome$(para2$)
para3$=Decome$(para3$)
para4$=Decome$(para4$)
para5$=Decome$(para5$)



ElseIf dritteskomma
para1$=Mid(parameter$, 1, ersteskomma-1)
para2$=Mid(parameter$, ersteskomma+1, zweiteskomma-ersteskomma-1)
para3$=Mid(parameter$, zweiteskomma+1, dritteskomma-zweiteskomma-1)
para4$=Mid(parameter$, dritteskomma+1)

para1$=Decome$(para1$)
para2$=Decome$(para2$)
para3$=Decome$(para3$)
para4$=Decome$(para4$)


ElseIf zweiteskomma
para1$=Mid(parameter$, 1, ersteskomma-1)
para2$=Mid(parameter$, ersteskomma+1, zweiteskomma-ersteskomma-1)
para3$=Mid(parameter$, zweiteskomma+1)

para1$=Decome$(para1$)
para2$=Decome$(para2$)
para3$=Decome$(para3$)



ElseIf ersteskomma
para1$=Mid(parameter$, 1, ersteskomma-1)
para2$=Mid(parameter$, ersteskomma+1)

para1$=Decome$(para1$)
para2$=Decome$(para2$)


Else
para1$=parameter$

If para1$=befehl$ para1$=""



If para1$<>"" para1$=Decome$(para1$) ;And Upper(befehl$)<>"GOTO" And Upper(befehl$)<>"IFINT"



EndIf

;If Mid(zeile$,1,1)<>";"

;Stop


Select Upper(befehl$)
Case "IFINT"

If erstesgleich>0
para1$=Mid(parameter$,1,erstesgleich-1)
para2$=Mid(parameter$,erstesgleich+1)
ElseIf erstesgroser>0
para1$=Mid(parameter$,1,erstesgroser-1)
para2$=Mid(parameter$,erstesgroser+1)
ElseIf ersteskleiner>0
para1$=Mid(parameter$,1,ersteskleiner-1)
para2$=Mid(parameter$,ersteskleiner+1)
EndIf

;For I=0 To variszahl
; If Var(I)\Name$=para1 Exit
;Next

para1$=Decome$(para1$)
para2$=Decome$(para2$)


If erstesgleich>0

If Int(para1)<>Int(para2)
aktuzeile=aktuzeile+1
EndIf
ElseIf erstesgroser>0

If Int(para1)<Int(para2)
aktuzeile=aktuzeile+1
EndIf

ElseIf ersteskleiner>0

If Int(para1)>Int(para2)
aktuzeile=aktuzeile+1
EndIf

EndIf


Case "HIDECURSOR"
HidePointer()
Case "SHOWCURSOR"
ShowPointer()

;Case "WENN"

Case "COLOR"
Color Int(para1), Int(para2), Int(para3)
Case "CLSCOLOR"
ClsColor Int(para1), Int(para2), Int(para3)
Case "COLORDESIGN"

Select Upper(para1)
Case "RED"
Color 255,0,0
Case "YELLOW"
Color 255,255,0
Case "ORANGE"
Color 255,128,0
Case "GREEN"
Color 0,255,0
Case "BLUE"
Color 0,0,255
Case "LIGHTBLUE"
Color 0,255,255
Case "BLUEGREEN"
Color 0,128,255
End Select


Case "CLS"
Cls

Case "GFX"
If para3="" para3="16"
If para4="" para4="1"
Graphics Int(para1), Int(para2), Int(para3), Int(para4)
Case "TITLE"
AppTitle para1

Case "CHANGEDIR"
ChangeDir para1$

Case "FULLSCREEN"
If para3="" para3="16"
Graphics Int(para1), Int(para2), Int(para3), 1
Case "WINDOW"
If para4="" para4="16"
AppTitle para1
Graphics Int(para2), Int(para3), Int(para4), 2
Case "NEWBUFFER"
If Upper(para1)="BACKBUFFER" Or Upper(para1)="BACKBUFFER()"
SetBuffer BackBuffer()
ElseIf Upper(para1)="FRONTBUFFER" Or Upper(para1)="FRONTBUFFER()"
SetBuffer FrontBuffer()
EndIf



Case "NEWINT"
;Steht im Lesebereich
Case "NEWIMAGE"
;Steht im Lesebereich
Case "NEWSOUND"
;Steht im Lesebereich
Case "MARK"
;Steht im Lesebereich



Case "PLAYSOUND"

PlaySound(Int(para1))

Case "PLAYMUSIC"

PlayMusic(para1)


Case "DRAWIMAGE"

DrawImage Int(para1$),Int(para2$),Int(para3$),Int(para4$)

Case "DRAWBLOCK"

DrawBlock Int(para1$),Int(para2$),Int(para3$),Int(para4$)


Case "PRINT"

Print para1

Case "WRITE"

Write para1


Case "TEXT"

If para4<>"0" And para4<>"1" para4 = 0
If para5<>"0" And para5<>"1" para5 = 0
Text Int(para1),Int(para2), para3$, Int(para4),Int(para5)
;Wenn ich hier kein Delay einfuege, dann wird der Text nicht ausgegeben
;Delay 100


;Operationen
Case "ADD"
para1$=Mid(parameter$, 1, ersteskomma-1)
;para2$=Mid(parameter$, ersteskomma+1)
For Var.tVar = Each tVar
If Var\Name$=para1 Exit
Next
Var\Wert = Var\Wert + Int(para2)

Case "SUB"
para1$=Mid(parameter$, 1, ersteskomma-1)
;para2$=Mid(parameter$, ersteskomma+1)
For Var.tVar = Each tVar
If Var\Name$=para1 Exit
Next
Var\Wert = Var\Wert - Int(para2)

Case "MUL"
para1$=Mid(parameter$, 1, ersteskomma-1)
;para2$=Mid(parameter$, ersteskomma+1)
For Var.tVar = Each tVar
If Var\Name$=para1 Exit
Next
Var\Wert = Var\Wert * Int(para2)

Case "DIV"
para1$=Mid(parameter$, 1, ersteskomma-1)
;para2$=Mid(parameter$, ersteskomma+1)
For Var.tVar = Each tVar
If Var\Name$=para1 Exit
Next
Var\Wert = Var\Wert / Int(para2)

Case "XOR"
For Var.tVar = Each tVar
If Var\Name$=para1 Exit
Next
Var\Wert = Var\Wert Xor Int(para2)


Case "WAITKEY"
WaitKey()
Case "WAITMOUSE"
WaitMouse()
Case "WAITMOUSESPEED"
Repeat
Until MouseXSpeed()<>0 Or MouseYSpeed()<>0
Case "WAIT"

Delay Int(para1)

Case "LINE"

Line Int(para1),Int(para2),Int(para3),Int(para4)


Case "PLOT"

Plot Int(para1),Int(para2)


Case "RECT"

Rect Int(para1),Int(para2),Int(para3),Int(para4)


Case "OVAL"

Oval Int(para1),Int(para2),Int(para3),Int(para4)


Case "CIRCLE"

Oval Int(para1)-Int(para3),Int(para2)-Int(para3),Int(para3)*2,Int(para3)*2,Int(para4)


Case "DRAWADDSIGN"

Rect Int(para1)-Int(para3),Int(para2),Int(para3)*2,Int(para4)
Rect Int(para1),Int(para2)-Int(para3),Int(para4),Int(para3)*2

Case "STOP"
Stop

Case "WAITONDEBUG"

   For Var.tVar = Each tVar
    Text 5, T*15+5, Var\Name$
    Text 100, T*15+5, Var\Wert
   Next
   Text 5, T*15+20, CurrentDir$()
   
WaitKey()

Case "FLIP"
Flip


;Case "GOTO"
;fromzeile=aktuzeile
;
;For I=0 To markezahl
; If Marke(I)\Name$=para1$ Exit
;Next
;aktuzeile=Marke(I)\Index

Case "GORETURN"
aktuzeile=fromzeile

Case "END"
;Beenden
End
Case ""
;Nichts
Default

RuntimeError "Befehl in Zeile "+(aktuzeile+1)+" nicht erkannt"

End Select



;EndIf

EndIf

aktuzeile=aktuzeile+1

Until aktuzeile=maxzeile



End



Function Typ$(stri$)

If Mid(stri$,1,1)=Chr(34) Return "Str"
If Asc( Mid(stri$,1,1) )>47 And Asc( Mid(stri$,1,1) )<58 Return "Int"
Return "Var"

End Function





Function NoString$(bibname$)

   Return Mid(bibname$,2,Len(bibname$)-2)

End Function




Function Decome$(paras$)



   If Typ(paras$)="Str"
    Return NoString(paras$)
   ElseIf Typ(paras$)="Var"
   
   For var.tVar = Each tVar
    ;If T=variszahl RuntimeError "Variable in Zeile "+Str$(aktuzeile+1)+" nicht erkannt."
      If var\Name$=paras$
      right_var = var
      Exit
      EndIf
   Next
   
   ;Select T
   ;Case 1
   ;End Select
   
   
   paras$ = Str$( right_var\Wert )
   EndIf
   
   
   Return paras$
   

End Function




Function DeclareVars(typus$="all")


If typus$="mouse" Or typus$="all"
Var.tVar = New tVar
Var\Wert=event$
Var.tVar = New tVar
Var\Wert=MouseX()
Var.tVar = New tVar
Var\Wert=MouseY()
Var.tVar = New tVar
Var\Wert=MouseZ()
Var.tVar = New tVar
Var\Wert=MouseXSpeed()
Var.tVar = New tVar
Var\Wert=MouseYSpeed()
Var.tVar = New tVar
Var\Wert=MouseZSpeed()
Var.tVar = New tVar
EndIf

If typus$="zufall" Or typus$="all"
Var.tVar = New tVar
Var\Wert=Rand(0,10)
EndIf





End Function




Function ShowDebug()


For Var.tVar = Each tVar
 DebugLog Str$(I)+".  "+Var\Wert
Next


End Function

[mod] Habe mir wegen der Länge des codes erlaubt auf Standard-Codetags zu ändern wegen der exorbitanten Ladezeit. Gruß BladeRunner [/mod]
  • Zuletzt bearbeitet von E. Urbach am Mo, Jun 13, 2005 14:28, insgesamt einmal bearbeitet

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jun 11, 2005 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich keine Lust mich in den Code einzuarbeiten, aber will dir doch etwas helfen Smile
Und hab diesen mal auf die Schnelle Formatiert mit Tabs usw. Code: [AUSKLAPPEN]

Type tVar
    Field Wert, Name$
End Type

Global right_var.tVar = New tVar
Dim AlleZeilen$ (1000)
Global befehl$, para1$, para2$, para3$, para4$, para5$, ersteskomma, zweiteskomma, dritteskomma, vierteskomma
Global erstesleer
Global erstesgleich, zeile$, datei, markezahl = -1, variszahl = -1, ruck, paras$, aktuzeile
Global dateiname$ = CommandLine ()
datei = ReadFile (dateiname$)
If datei = 0 Then RuntimeError "Datei " + dateiname$ + " nicht gefunden."
;Lesen
Repeat
    AlleZeilen (aktuzeile) = ReadLine (datei)
    zeile$ = AlleZeilen (aktuzeile)
    erstesleer = Instr (zeile$," ")
    befehl$ = Mid (zeile$,1,erstesleer - 1)
    para1$ = Mid (zeile, erstesleer + 1)
    erstesgleich = Instr (para1$,"=")
    If Left (zeile,1) <> ";" Then
       
        Select Upper$ (befehl$)
         Case "NEWINT"
            variszahl = variszahl + 1
            Var.tVar = New tVar
            Var\Wert = Int ( Mid ( para1$, erstesgleich + 1 ) )
            Var\Name$ = Mid ( para1$, 1, erstesgleich - 1 )
         Case "NEWIMAGE"
            variszahl = variszahl + 1
            Var.tVar = New tVar
            Var\Wert = LoadImage ( NoString (Mid ( para1$, erstesgleich + 1 ) ) )
            Var\Name$ = Mid ( para1$, 1, erstesgleich - 1 )
         Case "NEWSOUND"
            variszahl = variszahl + 1
            Var.tVar = New tVar
            Var\Wert = LoadSound ( NoString (Mid ( para1$, erstesgleich + 1 ) ) )
            Var\Name$ = Mid ( para1$, 1, erstesgleich - 1 )
        End Select
       
    EndIf
    aktuzeile = aktuzeile + 1
Until Eof (datei) = 1
maxzeile = aktuzeile
CloseFile datei
aktuzeile = 0
;Ausfuehren
Repeat
    DeclareVars ()
    zeile$ = AlleZeilen (aktuzeile)
    erstesleer = Instr (zeile$," ")
    befehl$ = Mid (zeile$,1,erstesleer - 1)
    If Left (zeile,1) <> ";" And Left (zeile,1) <> "" Then ;And Upper(befehl$)<>"MARK";Wenn kein Kommentar
        parameter$ = Mid (zeile, erstesleer + 1)
        If parameter$ = befehl$ Then parameter$ = ""
        ersteskomma = Instr (parameter$,",")
        zweiteskomma = Instr (parameter$,",",ersteskomma + 1)
        dritteskomma = Instr (parameter$,",",zweiteskomma + 1)
        vierteskomma = Instr (parameter$,",",dritteskomma + 1)
        ;Funktioniert leider nur fuer ein "" - Parameter (Zeichen)
        anf_found = Instr (parameter$,Chr (34) )
        If anf_found Then
            If anf_found < ersteskomma And ersteskomma < Instr (parameter$,Chr (34) ,anf_found + 1) Then ersteskomma = 0
            If anf_found < zweiteskomma And zweiteskomma < Instr (parameter$,Chr (34) ,anf_found + 1) Then zweiteskomma = 0
            If anf_found < dritteskomma And dritteskomma < Instr (parameter$,Chr (34) ,anf_found + 1) Then dritteskomma = 0
            If anf_found < vierteskomma And vierteskomma < Instr (parameter$,Chr (34) ,anf_found + 1) Then vierteskomma = 0
        EndIf
        erstesgleich = Instr (parameter$,"=")
        erstesgroser = Instr (parameter$,">")
        ersteskleiner = Instr (parameter$,"<")
        para1$ = ""
        para2$ = ""
        para3$ = ""
        para4$ = ""
        para5$ = ""
        If vierteskomma Then
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            para2$ = Mid (parameter$, ersteskomma + 1, zweiteskomma - ersteskomma - 1)
            para3$ = Mid (parameter$, zweiteskomma + 1, dritteskomma - zweiteskomma - 1)
            para4$ = Mid (parameter$, dritteskomma + 1, vierteskomma - dritteskomma - 1)
            para5$ = Mid (parameter$, vierteskomma + 1)
            para1$ = Decome$ (para1$)
            para2$ = Decome$ (para2$)
            para3$ = Decome$ (para3$)
            para4$ = Decome$ (para4$)
            para5$ = Decome$ (para5$)
         ElseIf dritteskomma
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            para2$ = Mid (parameter$, ersteskomma + 1, zweiteskomma - ersteskomma - 1)
            para3$ = Mid (parameter$, zweiteskomma + 1, dritteskomma - zweiteskomma - 1)
            para4$ = Mid (parameter$, dritteskomma + 1)
            para1$ = Decome$ (para1$)
            para2$ = Decome$ (para2$)
            para3$ = Decome$ (para3$)
            para4$ = Decome$ (para4$)
         ElseIf zweiteskomma
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            para2$ = Mid (parameter$, ersteskomma + 1, zweiteskomma - ersteskomma - 1)
            para3$ = Mid (parameter$, zweiteskomma + 1)
            para1$ = Decome$ (para1$)
            para2$ = Decome$ (para2$)
            para3$ = Decome$ (para3$)
         ElseIf ersteskomma
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            para2$ = Mid (parameter$, ersteskomma + 1)
            para1$ = Decome$ (para1$)
            para2$ = Decome$ (para2$)
         Else
            para1$ = parameter$
            If para1$ = befehl$ Then para1$ = ""
            If para1$ <> "" Then para1$ = Decome$ (para1$) ;And Upper(befehl$)<>"GOTO" And Upper(befehl$)<>"IFINT"
        EndIf
        ;If Mid(zeile$,1,1)<>";"
        ;Stop
       
        Select Upper (befehl$)
         Case "IFINT"
            If erstesgleich > 0 Then
                para1$ = Mid (parameter$,1,erstesgleich - 1)
                para2$ = Mid (parameter$,erstesgleich + 1)
             ElseIf erstesgroser > 0
                para1$ = Mid (parameter$,1,erstesgroser - 1)
                para2$ = Mid (parameter$,erstesgroser + 1)
             ElseIf ersteskleiner > 0
                para1$ = Mid (parameter$,1,ersteskleiner - 1)
                para2$ = Mid (parameter$,ersteskleiner + 1)
            EndIf
            ;For I=0 To variszahl
            ; If Var(I)\Name$=para1 Exit
            ;Next
            para1$ = Decome$ (para1$)
            para2$ = Decome$ (para2$)
            If erstesgleich > 0 Then
                If Int (para1) <> Int (para2) Then
                    aktuzeile = aktuzeile + 1
                EndIf
             ElseIf erstesgroser > 0
                If Int (para1) < Int (para2) Then
                    aktuzeile = aktuzeile + 1
                EndIf
             ElseIf ersteskleiner > 0
                If Int (para1) > Int (para2) Then
                    aktuzeile = aktuzeile + 1
                EndIf
            EndIf
         Case "HIDECURSOR"
            HidePointer ()
         Case "SHOWCURSOR"
            ShowPointer ()
            ;Case "WENN"
         Case "COLOR"
            Color Int (para1) , Int (para2) , Int (para3)
         Case "CLSCOLOR"
            ClsColor Int (para1) , Int (para2) , Int (para3)
         Case "COLORDESIGN"
           
            Select Upper (para1)
             Case "RED"
                Color 255 ,0,0
             Case "YELLOW"
                Color 255 ,255,0
             Case "ORANGE"
                Color 255 ,128,0
             Case "GREEN"
                Color 0 ,255,0
             Case "BLUE"
                Color 0 ,0,255
             Case "LIGHTBLUE"
                Color 0 ,255,255
             Case "BLUEGREEN"
                Color 0 ,128,255
            End Select
           
         Case "CLS"
            Cls
         Case "GFX"
            If para3 = "" Then para3 = "16"
            If para4 = "" Then para4 = "1"
            Graphics Int (para1) , Int (para2) , Int (para3) , Int (para4)
         Case "TITLE"
            AppTitle para1
         Case "CHANGEDIR"
            ChangeDir para1$
         Case "FULLSCREEN"
            If para3 = "" Then para3 = "16"
            Graphics Int (para1) , Int (para2) , Int (para3) , 1
         Case "WINDOW"
            If para4 = "" Then para4 = "16"
            AppTitle para1
            Graphics Int (para2) , Int (para3) , Int (para4) , 2
         Case "NEWBUFFER"
            If Upper (para1) = "BACKBUFFER" Or Upper (para1) = "BACKBUFFER()" Then
                SetBuffer BackBuffer ()
             ElseIf Upper (para1) = "FRONTBUFFER" Or Upper (para1) = "FRONTBUFFER()"
                SetBuffer FrontBuffer ()
            EndIf
         Case "NEWINT"
            ;Steht im Lesebereich
         Case "NEWIMAGE"
            ;Steht im Lesebereich
         Case "NEWSOUND"
            ;Steht im Lesebereich
         Case "MARK"
            ;Steht im Lesebereich
         Case "PLAYSOUND"
            PlaySound (Int (para1) )
         Case "PLAYMUSIC"
            PlayMusic (para1)
         Case "DRAWIMAGE"
            DrawImage Int (para1$) ,Int (para2$) ,Int (para3$) ,Int (para4$)
         Case "DRAWBLOCK"
            DrawBlock Int (para1$) ,Int (para2$) ,Int (para3$) ,Int (para4$)
         Case "PRINT"
            Print para1
         Case "WRITE"
            Write para1
         Case "TEXT"
            If para4 <> "0" And para4 <> "1" Then para4 = 0
            If para5 <> "0" And para5 <> "1" Then para5 = 0
            Text Int (para1) ,Int (para2) , para3$, Int (para4) ,Int (para5)
            ;Wenn ich hier kein Delay einfuege, dann wird der Text nicht ausgegeben
            ;Delay 100
            ;Operationen
         Case "ADD"
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            ;para2$=Mid(parameter$, ersteskomma+1)
            For Var.tVar = Each tVar
                If Var\Name$ = para1 Then Exit
            Next
            Var\Wert = Var\Wert + Int (para2)
         Case "SUB"
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            ;para2$=Mid(parameter$, ersteskomma+1)
            For Var.tVar = Each tVar
                If Var\Name$ = para1 Then Exit
            Next
            Var\Wert = Var\Wert - Int (para2)
         Case "MUL"
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            ;para2$=Mid(parameter$, ersteskomma+1)
            For Var.tVar = Each tVar
                If Var\Name$ = para1 Then Exit
            Next
            Var\Wert = Var\Wert * Int (para2)
         Case "DIV"
            para1$ = Mid (parameter$, 1, ersteskomma - 1)
            ;para2$=Mid(parameter$, ersteskomma+1)
            For Var.tVar = Each tVar
                If Var\Name$ = para1 Then Exit
            Next
            Var\Wert = Var\Wert / Int (para2)
         Case "XOR"
            For Var.tVar = Each tVar
                If Var\Name$ = para1 Then Exit
            Next
            Var\Wert = Var\Wert Xor Int (para2)
         Case "WAITKEY"
            WaitKey ()
         Case "WAITMOUSE"
            WaitMouse ()
         Case "WAITMOUSESPEED"
            Repeat
            Until MouseXSpeed () <> 0 Or MouseYSpeed () <> 0
         Case "WAIT"
            Delay Int (para1)
         Case "LINE"
            Line Int (para1) ,Int (para2) ,Int (para3) ,Int (para4)
         Case "PLOT"
            Plot Int (para1) ,Int (para2)
         Case "RECT"
            Rect Int (para1) ,Int (para2) ,Int (para3) ,Int (para4)
         Case "OVAL"
            Oval Int (para1) ,Int (para2) ,Int (para3) ,Int (para4)
         Case "CIRCLE"
            Oval Int (para1) - Int (para3) ,Int (para2) - Int (para3) ,Int (para3) * 2 ,Int (para3) * 2 ,Int (para4)
         Case "DRAWADDSIGN"
            Rect Int (para1) - Int (para3) ,Int (para2) ,Int (para3) * 2 ,Int (para4)
            Rect Int (para1) ,Int (para2) - Int (para3) ,Int (para4) ,Int (para3) * 2
         Case "STOP"
            Stop
         Case "WAITONDEBUG"
            For Var.tVar = Each tVar
                Text 5, T * 15 + 5, Var\Name$
                Text 100 , T * 15 + 5, Var\Wert
            Next
            Text 5, T * 15 + 20 , CurrentDir$ ()
            WaitKey ()
         Case "FLIP"
            Flip
            ;Case "GOTO"
            ;fromzeile=aktuzeile
            ;
            ;For I=0 To markezahl
            ; If Marke(I)\Name$=para1$ Exit
            ;Next
            ;aktuzeile=Marke(I)\Index
         Case "GORETURN"
            aktuzeile = fromzeile
         Case "END"
            ;Beenden
            End
         Case ""
            ;Nichts
         Default
            RuntimeError "Befehl in Zeile " + (aktuzeile + 1) + " nicht erkannt"
        End Select
       
        ;EndIf
    EndIf
    aktuzeile = aktuzeile + 1
Until aktuzeile = maxzeile
End

Function Typ$ (stri$)
    If Mid (stri$,1,1) = Chr (34) Then Return "Str"
    If Asc ( Mid (stri$,1,1) ) > 47 And Asc ( Mid (stri$,1,1) ) < 58 Then Return "Int"
    Return "Var"
End Function

Function NoString$ (bibname$)
    Return Mid (bibname$,2,Len (bibname$) - 2)
End Function

Function Decome$ (paras$)
    If Typ (paras$) = "Str" Then
        Return NoString (paras$)
     ElseIf Typ (paras$) = "Var"
        For var.tVar = Each tVar
            ;If T=variszahl RuntimeError "Variable in Zeile "+Str$(aktuzeile+1)+" nicht erkannt."
            If var\Name$ = paras$ Then
                right_var = var
                Exit
            EndIf
        Next
        ;Select T
        ;Case 1
        ;End Select
        paras$ = Str$ ( right_var\Wert )
    EndIf
    Return paras$
End Function

Function DeclareVars (typus$ = "all")
    If typus$ = "mouse" Or typus$ = "all" Then
        Var.tVar = New tVar
        Var\Wert = event$
        Var.tVar = New tVar
        Var\Wert = MouseX ()
        Var.tVar = New tVar
        Var\Wert = MouseY ()
        Var.tVar = New tVar
        Var\Wert = MouseZ ()
        Var.tVar = New tVar
        Var\Wert = MouseXSpeed ()
        Var.tVar = New tVar
        Var\Wert = MouseYSpeed ()
        Var.tVar = New tVar
        Var\Wert = MouseZSpeed ()
        Var.tVar = New tVar
    EndIf
    If typus$ = "zufall" Or typus$ = "all" Then
        Var.tVar = New tVar
        Var\Wert = Rand (0 ,10)
    EndIf
End Function

Function ShowDebug ()
    For Var.tVar = Each tVar
        DebugLog Str$ (I) + ".  " + Var\Wert
    Next
End Function

Vielleicht hilft dir das schon weiter!
[BB2D | BB3D | BB+]
 

E. Urbach

ehemals "Basicprogger"

BeitragMo, Jun 13, 2005 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@Ralliman
Danke, dass du mir diese Arbeit erspart hast, aber den Fehler kann ich immer noch nicht finden.

@All
Es ist bei mir noch nie vorgekommen, dass ich nach einem Text oder Print Befehl das Programm ! IRGENDWIE ! abbremsen muss.

Und Delay 1 oder so hilft nicht, es muss wirklich stark (mind. 1/10 sek.) abbgebremst werden, ansonsten wird der Befehl einfach übersprungen.

Ich habe auch versucht, in der Case - Verzweigung ein Stop einzusetzen und der Debugger hält auch an! Also wird der Fall (Case) aufgerufen, aber der Befehl Text oder Print ! IRGENDWIE ! übersprungen.

Weiß denn niemand was? Ich bin wirklich am Verzweifeln! Crying or Very sad

Xaron

Betreff: Re: Skript-Problem

BeitragMo, Jun 13, 2005 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Basic_Progger hat Folgendes geschrieben:
Der neue Text wird nicht geschrieben. Wenn ich Delay 1 nach dem Text - Befehl einsetze funktioniert es trotzdem nicht. Nur bei einem Wert ca. > 100.


Das hat dann wohl vermutlich irgendwas mit den Buffern und dem Flip zu tun. Ich hab's mir jetzt nicht angeschaut, aber der Fehler entspräche in etwa dem Verhalten...
Übersprungen wird der Befehl sicher nicht. Wink

Gruß - Xaron
Cerberus X - Monkey X Reloaded!

Xaron

BeitragMo, Jun 13, 2005 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler tritt hier auf:

Code: [AUSKLAPPEN]

         Case "NEWBUFFER"
            If Upper (para1) = "BACKBUFFER" Or Upper (para1) = "BACKBUFFER()" Then
                SetBuffer BackBuffer ()
             ElseIf Upper (para1) = "FRONTBUFFER" Or Upper (para1) = "FRONTBUFFER()"
                SetBuffer FrontBuffer ()
            EndIf


Das Problem ist: para1 ist bei mir immer 0. Damit wird wohl der Buffer nicht richtig gesetzt und ein Flip-Kommando zeigt Dir dann anschließend den leeren Backbuffer. Wink

Du musst in Deinem Skript also in der zweiten Zeile:
newbuffer "backbuffer"
schreiben, den Parameter also mit den Anführungszeichen als String klassifizieren.

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

E. Urbach

ehemals "Basicprogger"

Betreff: Stimmt

BeitragDi, Jun 14, 2005 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt!
Du hast Recht!
Dass ich darauf nicht gekommen bin! Confused

Edit:
Warte mal, wenn ich in einem normalen BB-Programm das normal funzt das aber nicht!

SetBuffer BackBuffer()
Print "Hallo"

das funzt bei mir nicht mehr, erst mit Delay 100


SetBuffer BackBuffer()
Print "Hallo"
Delay 100

Xaron

Betreff: Re: Stimmt

BeitragDi, Jun 14, 2005 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Basic_Progger hat Folgendes geschrieben:
Stimmt!
Du hast Recht!
Dass ich darauf nicht gekommen bin! Confused

Edit:
Warte mal, wenn ich in einem normalen BB-Programm das normal funzt das aber nicht!

SetBuffer BackBuffer()
Print "Hallo"

das funzt bei mir nicht mehr, erst mit Delay 100


Flip vergessen? Bei mir geht beides... Komisch.

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

E. Urbach

ehemals "Basicprogger"

BeitragDi, Jun 14, 2005 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
äh, ja,bin ich blöd,sry, tschuldige, ich meinte natürlich:

setbuffer frontbuffer()
Print "Test"
;Wenn ich hier KEIN Delay 100 oder waitkey benutze geht's nicht. Früher gings

Edit: Früher, ca. vor 'n paar Monaten

Xaron

BeitragDi, Jun 14, 2005 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Komisch... auch das funktioniert bei mir.

Gruß - Xaron
Cerberus X - Monkey X Reloaded!
 

E. Urbach

ehemals "Basicprogger"

BeitragMi, Jun 15, 2005 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ja, das funktioniert natürlich, aber komisch, is wahrscheinlich irgendeine Sache auf meinem PC, die das verhindert. Mir ist schon klar, dass das eigentlich funktionieren MÜSSTE, weil das ja bei Renes Buch auch gleich im ersten Kapitel steht, aber seit geraumer Zeit nicht mehr.

Ich versuch mal, BB3D neu zu installieren und ein neues Update zu holen!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group