ds_list_find_value Problem

  • ds_list_find_value Problem

    Hey alle zusammen,
    Ich hoffe ihr habt eine Lösung auf mein (für mich total unlogisches) Problem.
    Folgendes:
    Ich habe 2 Listen ("offen" und "global.aufhand").
    Dann gibt es eine Methode die die Werte aus der Liste offen in die Liste global.aufhand überträgt

    GML-Quellcode

    1. [...]
    2. ds_list_add(global.aufhand,ds_list_find_value(offen,position))
    3. ds_list_delete(offen,position)

    Ein anderes Script wertet die Liste aus und zeichnet die "Ergebnisse".

    GML-Quellcode

    1. draw_card(ds_list_find_value(global.aufhand,i),x,y+i*16)

    Was dabei rauskommt, ist dass zum Beispiel bei dem Wert 2.3 eine Herz 3 gezeichnet wird.

    So mein Problem:
    - draw_card(2.3,x,y) zeichnet eine Herz 3.
    - ds_list_add(global.aufhand,2.3) und darauf folgend draw_card(ds_list_find_value(global.aufhand,0),x,y) zeichnet eine Herz 3

    Wieso zeichnet er die nicht, bei der oben beschriebenen Methode?

    GML-Quellcode

    1. for(i=0;i<ds_list_size(global.aufhand);i+=1)
    2. {
    3. draw_card(ds_list_find_value(global.aufhand,i),x,y+i*16)
    4. draw_text(x,y+i*16,string(ds_list_find_value(global.aufhand,i)))
    5. }

    So sieht das Drawevent aus. Der Text zeigt eindeutig den Wert - draw_card funktioniert trotzdem nicht. Aber wieso funktioniert es denn, wenn ich direkt 2.3 (bei draw_card oder halt ds_list_add) ? Bei meiner Methode passiert ja genau das gleiche... Ich habe auch schon damit rumprobiert, dass die Werte mit real(...) ausgelesen bzw eingesetzt werden... funktioniert jedoch auch nicht.
    Also ich sehe da überhaupt keinen Sinn, ich hoffe dennoch, dass mir jemand helfen kann.
    Danke schonmal..

    Und an sonsten wünsch ich euch allen frohe Feiertage ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Superdaniel ()

  • draw_card:

    GML-Quellcode

    1. if argument0=0
    2. {
    3. draw_sprite(sprite0,0,argument1,argument2)
    4. }
    5. else
    6. {
    7. var sprite,image;
    8. switch karte(argument0,0)
    9. {
    10. case 1:sprite=sprite1;break
    11. case 2:sprite=sprite2;break
    12. case 3:sprite=sprite3;break
    13. case 4:sprite=sprite4;break
    14. default:sprite=sprite0;break
    15. }
    16. image=karte(argument0,1)-1
    17. draw_sprite(sprite,image,argument1,argument2)
    18. }
    Alles anzeigen

    und das Script karte:

    GML-Quellcode

    1. //farbe
    2. if argument1=0
    3. return frac(argument0)*10
    4. //zahl
    5. else if argument1=1
    6. return floor(argument0)
  • Probier mal um

    GML-Quellcode

    1. frac(argument0)*10

    noch ein round zu machen. Fänd ich zwar selber seltsam, wenn es so klappen würde, weil wenn es wirklich ein Rundungsfehler geben würde, müsste dieser ja auch entstehen, wenn du die 2.3 einfach so übergibst. Aber kannst ja trotzdem mal probieren.
  • ...da die Zahl ja sowieso "rund" ist...

    Was man hier intuitiv vermutet ist leider falsch, denn obwohl 2.3 im Dezimalsystem "rund" ist, ist sie das im Dualsystem nicht. Und damit rechnet schließlich der Computer. Auf der Seite sps-lehrgang.de/dualzahlen-umrechnen/ findest du weiter unten eine interessante Tabelle mit einer Reihe von Zahlen, die zwar im Dezimalsystem aber nicht im Dualsystem exakt dargestellt werden können. Da ist auch die 0.3 dabei um die es hier geht.