Aktuelle Zeit: 29.09.2020 00:52

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: AddImageFrame macht was es will !
BeitragVerfasst: 04.08.2020 20:06 
Offline
Benutzeravatar

Registriert: 11.06.2017 20:25
Ich will nicht viel dazu sagen, probiert es einfach aus, und schaut euch die Kommentare
im Code an, und ihr werdet schnell merken das sie unlogisches Verhalten hat. Egal ob Möglichkeit

a) Müll Frame vorne abschneiden (wenn mann da nicht aufpasst, verliert mann schnell ein nützliches Frame)

oder

b) Müll Frame am Ende abschneiden.

PB 5.72 32Bit unter Windows

Code:
 

  #pic = 0
  #gd = 0
  #Win = 0

  OpenWindow(#Win,0,0,500,400,"New Prog",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
 
  If CreateImage(#pic, 200, 200)
    StartDrawing(ImageOutput(#pic))
      Box(0,0,200,200,#blue)
      DrawText(5,5,"Bla",#yellow)
    StopDrawing()
    ImageGadget(#gd, 0, 0, 200, 200, ImageID(#pic))
  EndIf 
 
 
  Repeat
   
    Event = WaitWindowEvent() 
   
    If Event = #PB_Event_Gadget
     
      EventGadget = EventGadget()
     
      If EventGadget = #gd And EventType() = #PB_EventType_LeftClick
        x = ImageFrameCount(#pic)
        Debug x ; 1 ? Wirklich ? Ok dann schmeissen wir eins drauf
       
        ;AddImageFrame(#pic,2) ; HMM liegt ausserhalb des gültigen bereichs. Schon klar, fängt ja auch bei 0 an, dann probieren wir die 1.
        ;AddImageFrame(#pic,1) ; Was immer noch ein Fehler ? Wieso ? Das ist total unlogisch. Ok dann halt 0 !
       
        AddImageFrame(#pic,0) ; Das geht ? Warum ist dann x schon davor 1 gewesen ?
        ; Ok ein Bild drin, aber die erste Pos ist 0 !
        ; warum ist dann AddImageFrame(#pic,1) out of bounds ? Und was passiert wenn ich vor schon direkt nach CreateImage
        ; auf #pic zeichnen würde, und dann AddImageFrame(#pic,0) benutze ? geht dann der Inhalt flöten ? Probieren wir es aus.
       
        SetImageFrame(#pic,0)
        SetGadgetState(#gd,ImageID(#pic)) ; Ja geht es oder ? ! Wo ist dann die Bla Box hin ?
        MessageRequester("ImageFramePos=0","Wo ist sie die Box ?")
        SetImageFrame(#pic,1) ; Setzen wir mal auf 1 !
        SetGadgetState(#gd,ImageID(#pic)) ; Da ist sie wieder ? WTF ? Und was ist dann die 0 ?
        ;ein unnötiges schwarzes Frame ! Gut dann schneiden wir das halt raus. Aber davor fügen wir noch ein paar Frames dazu.
        MessageRequester("ImageFramePos=1","Da ist sie ja. Auf der 1. Wurde also einfach so von 0 auf 1 verschoben")
        For p = 1 To 4 ; Ok da BLA jetzt auf 1 ist, überschreiben wir gerade BLA
          AddImageFrame(#pic,p)
          StartDrawing(ImageOutput(#pic))
            Box(0,0,200,200,#blue)
            DrawText(5,5,Str(p),#yellow)
          StopDrawing()
        Next
        MessageRequester("","Nach Draw: for p = 1 to 4")
        For p = 0 To 4
          SetImageFrame(#pic,p)
          SetGadgetState(#gd,ImageID(#pic))
          MessageRequester("",Str(p))
        Next
        y = ImageFrameCount(#pic)
        Debug y ; 6 ????? Wirklich ? Wir haben 4 hinzugefügt (p = 1 to 4) und die erste Position ist 0 !
        ;RemoveImageFrame(#pic,6) ; Out of bounds, war ja klar.
        RemoveImageFrame(#pic,5) ; OK
        ;SetImageFrame(#pic,5) ; Natürlich nicht ok ! Wir haben 4 hinzugefügt, und 0 ist das erste, nur ist das erste Schwarz !
        ; Und was ist wenn wir jetzt das erste enfernen ?
        RemoveImageFrame(#pic,0)
        h = ImageFrameCount(#pic)
        Debug h ; Aha also 5
        SetImageFrame(#pic,0)
        SetGadgetState(#gd,ImageID(#pic))
       
        MessageRequester("","Wieso kommt wenn p = 4 ist out of bounds ? Sagte das Ding nicht gerade das h = 5 ist ?"+Chr(10)+"Wir schaffen es ja nicht mal bis zur 4 !")
        For p = 0 To 4
          SetImageFrame(#pic,p)
          SetGadgetState(#gd,ImageID(#pic))
          MessageRequester("p="+Str(p),"")
        Next
       
        ; Und wenn mann AddFrameImage(#pic) benutzt ohne id hinten, dann ist halt das letzte Frame ein schwarzes unnötiges
        ; (das mann löschen sollte) aber immerhin geht nichts durch das WirWar verhalten das bei einem selbst auch für WirWar sorgt verloren !
        ; Die Funktion ist fast unbrauchbar, total unberechenbares verhalten, machste mit Zähler, macht sie vorne Müll, machste ohne
        ; dann hinten, setzt du sie über eine CopyImage Funtion benimmt sie sich wieder anders als direkt drunter ! Alles schon gehabt.
       
      EndIf
     
    EndIf
   
    If Event = #PB_Event_CloseWindow
      End
    EndIf
   
  ForEver

_________________
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddImageFrame macht was es will !
BeitragVerfasst: 05.08.2020 17:56 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Wenn ich es richtig verstehe fügt AddImageFrame() ohne 2ten Parameter ein Frame an der nächsten Stelle (Index 1) hinzu!
AddImageFrame() mit 0 als Index dagegen schiebt das aktuelle Bild an die 2te Stelle (Index 1) das eingefügte Frame ist wie erwartet an 1ster Stelle (Index 0).

Also alles ok :)

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Zuletzt geändert von Mijikai am 05.08.2020 18:01, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddImageFrame macht was es will !
BeitragVerfasst: 05.08.2020 18:01 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
GlassJoe hat geschrieben:
PB 5.72 32Bit unter Windows

Wieso nutzt du nicht die 64-Bit-Version?

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddImageFrame macht was es will !
BeitragVerfasst: 05.08.2020 22:09 
Offline
Benutzeravatar

Registriert: 11.06.2017 20:25
Mijikai hat geschrieben:
Wenn ich es richtig verstehe fügt AddImageFrame() ohne 2ten Parameter ein Frame an der nächsten Stelle (Index 1) hinzu!
AddImageFrame() mit 0 als Index dagegen schiebt das aktuelle Bild an die 2te Stelle (Index 1) das eingefügte Frame ist wie erwartet an 1ster Stelle (Index 0).

Also alles ok :)


Ja es schiebt je nachdem ob mit oder ohne Angabe.

Aber es rechnet auch falsch am Anfang und später auch noch.

Zeile 28. x = 1 (was eigentlich schon mal falsch ist, noch hab ich kein Frame erstellt, und desshalb ergibt das folgende
keinen Sinn wenn mann die Funktion das erste mal benutzt)

Wenn x = 1 ist, und ich AddImageFrame(bla,0) mache (ein 1 erzeugt ja ein out of bounds) und 0 die erste Position ist, und x = 1, ist alles ok bis auf die Tatsache das ""Frame"" 0 auf einmal an Position 1 ist !

Ich hab also keine Möglichkeit innerhalb einer Schleife mit AddImageFrame(bla,counter) in gewohnter Weise zu arbeiten
denn das Ding schiebt mir dann den ersten ""Frame"" einfach an Position 1 (zählt später irgendwas wirres zusammen)

Und dann zählt es noch falsch

Zeile 45: For 1 to 4

Ich zähle da 4, macht mit dem Frame der schon drin ist natürlich 5.

Da wir Frame 1 überschreiben.

Zeile 58 meint aber das y = 6 ist !

Und das kann nicht sein, denn wir haben 3 hinzugefügt, und einer (die 1) in "For 1 to 4" wurde überschrieben.

Zeile 60 erzeugt ein out of bounds, was schon klar ist, es können keine 6 drin sein.

Zeile 61 geht was Sinn ergibt.

Aber Zeile 71 ergibt keinen Sinn mehr !

1 + 4 = 5

Und trotzdem kackt das Ding bei "For p 0 to 4" bei 4 ab.

Jetzt stellt euch mal vor wie ich am abfluchen war, weil ich in der einen Procedure noch ohne 2. Paramter arbeiten konnte (aber erst mal nicht wollte, aber musste weil so verwirrend) und dann halt am Ende das letzte Frame (das den Inhalt vom ersten ""Frame"" hat, also das schwarze weil mit CreateImage erstellt) abschneiden musste

und in der anderen Procedure nicht am 2. Parameter vorbei gekommen bin, und erst viiiiiiiiiiiiiiiiiiiiiel später gemerkt hab das nicht einfach nur Frame 0 schwarz ist und mann das dann halt abschneidet, nein Frame 1 war das schwarze (und so hab ich ein nützliches abgeschnitten) weil das schwarze immer weiter verschoben wird, und mit Angabe von Param 2 und dem falschen Zähler irgendwann auf der 1 landet statt auf der letzten Position oder wenigstens Pos 0 (was ja der Ursprung wäre)

Frames können sich manchmal wahnsinnig ähnlich sehen (nebeneinander betrachtet ist auf den ersten Blick kein Unterschied)

Bild

CountGagetItems, ListSize usw millionen mal benutzt, alles völlig logisch, auch das ne Pos Angabe immer bei 0 anfängt* aber das da einfach verschoben wird, daß Ding mehr Frames angibt obwohl eines überschrieben wurde, und dann bei Pos 4 abkackt obwohl 5 Frames drin sein sollten (laut Zeile 71) ist unlogisch.

*ausser bei StringField, und beim mehrdimensionalen Array also Dim MultiArray.b(NbColumns, NbLines)
NBColumns darf beim abfragen nicht unter 1 sein (bei einem ListIcon geht aber 0, war verwunderlich für mich) sonst OutOfBounds, bei NBLines geht 0 (also wie gewohnt) und was auch erst mal gewöhnungsbedürftig war (weil ich sonst zu 90% andersherum arbeite, immer erst Row Angeben und hinten Col Param) daß NBColumns der erste ""Param"" ist, und Lines danach abgefragt werden, aber auch daran konnte ich mich schnell gewöhnen.

@NicTheQuick

Lieber erschiesse ich mich als unnötig mehr Ram für bisschen mehr Leistung aufm Papier zu verbrauchen :lol: Ich bin mit MS-DOS groß geworden, und hab ein RAM Trauma dabei erlitten :lol: und bis heute geize ich am Ram wo es nur geht.
Ram wird nur benutzt wenn es damit viel schneller geht

_________________
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye