frage zu random subimg

  • Win

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • frage zu random subimg

    ich habe schon ein wenig rumgeschaut aber leider nichts geholfen das mir helfen könnte nun erstmal zu dem was ich vorhabe ;)

    eine bis jetzt noch nicht festgelegte anzahl von bildern die ich gerne zufällig durcheinandergewürfelt hätte. sollen so lang wieder durcheinander gemischt werden bis alle richtig zugewiesen wurden. nun hatte ich das so vor.

    beispiel

    spr_bilder (5subimages)

    obj_bilder

    im Create

    GML-Quellcode

    1. //animation off
    2. image_speed = 0;
    3. //bilder nicht richtig =0 bilder richtig =1
    4. bild1=0
    5. bild2=0
    6. bild3=0
    7. bild4=0
    8. bild5=0
    9. if bild1=1 image_index = 0 {image_index = floor( random( image_number ) );}
    10. if bild2=1 image_index = 1 {image_index = floor( random( image_number ) );}
    11. if bild3=1 image_index = 2 {image_index = floor( random( image_number ) );}
    12. if bild4=1 image_index = 3 {image_index = floor( random( image_number ) );}
    13. if bild5=1 image_index = 4 {image_index = floor( random( image_number ) );}
    Alles anzeigen


    wenn jetzt ein bild richtig zugeordnet wurde wird dies ausgefürht

    GML-Quellcode

    1. obj_bilder.bild3=1


    nun sollte doch das subimage 2 nicht mehr angezeigt werden sondern nur noch noch die anderen oder mach ich da ein denkfehler`?
  • Soweit ich das vestanden habe, kannst du eine Liste nehmen und dann dort die ganzen möglichen Wert eintragen:

    GML-Quellcode

    1. var list;
    2. list=ds_list_create();
    3. ds_list_add(list, 42);
    4. ds_list_add(list, 21);
    5. ds_list_add(list, 5);

    Dann erstellst du eine zweite Liste in dem die durchgewürfelten Wert kommen:

    GML-Quellcode

    1. var flist;
    2. flist=ds_list_create();

    Und nun wählst du von der ersten Liste solange einen zufälligen Wert aus bis dieser leer ist:

    GML-Quellcode

    1. var index;
    2. while(ds_list_size(list)>0) {
    3. index=floor(random(ds_list_size(list)));
    4. ds_list_add(flist, ds_list_find_value(list, index));
    5. ds_list_delete(list, index);
    6. }


    Am Ende solltest du die Listen wieder löschen falls du sie nicht brauchst.

    (Hab ich mal so geschrieben, lässt sich vielleicht auch anders lösen)
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • ich habe nun ein objekt mit 6 bildern gemacht dieses objekt hat nun dies im

    Create

    GML-Quellcode

    1. var list;
    2. list=ds_list_create();
    3. ds_list_add(list, 1);
    4. ds_list_add(list, 2);
    5. ds_list_add(list, 3);
    6. ds_list_add(list, 4);
    7. ds_list_add(list, 5);
    8. ds_list_add(list, 6);
    9. var flist;
    10. flist=ds_list_create();
    Alles anzeigen


    und um das ganze zu testen habe ich ein "Mouse Left Released" Event gemacht in dem das steht

    GML-Quellcode

    1. var index;
    2. while(ds_list_size(list)>0) {
    3. index=floor(random(ds_list_size(list)));
    4. ds_list_add(flist, ds_list_find_value(list, index));
    5. ds_list_delete(list, index);
    6. }


    nun sollte doch bis die liste "list" leer ist bei jedem maustaste loslassen ein neues subimage angezeigt werden oder?
  • Der zweite Code würfelt nur die Liste durch (und löscht dabei alle Einträge), das heißt es ist nicht 1, 2, 3, 4... sondern 4, 1, 3, 2.

    Im Create Event musst du also beide Codes einfügen:

    GML-Quellcode

    1. var list;
    2. list=ds_list_create();
    3. ds_list_add(list, 1);
    4. ds_list_add(list, 2);
    5. ds_list_add(list, 3);
    6. ds_list_add(list, 4);
    7. ds_list_add(list, 5);
    8. ds_list_add(list, 6);
    9. flist=ds_list_create(); //kein var sonst kannste nicht drauf zugreifen
    10. //durchwürfeln
    11. var index;
    12. while(ds_list_size(list)>0) {
    13. index=floor(random(ds_list_size(list)));
    14. ds_list_add(flist, ds_list_find_value(list, index));
    15. ds_list_delete(list, index);
    16. }
    17. ds_list_destroy(list); //liste löschen damit die nicht unnötig speicher verbraucht
    Alles anzeigen


    Nun könntest du aus flist die Reihe durchgehen (neuer Subimage Index auswählen):

    GML-Quellcode

    1. image_index=ds_list_find_value(flist, 0);
    2. ds_list_delete(flist, 0);


    Du sollst vorher prüfen ob die Liste noch einen Eintrag hat und wenn diese leer ist löschen.

    Alternativ kannst du das würfeln direkt im Maus Event machen (das var bei List wegmachen):

    GML-Quellcode

    1. var index;
    2. index=floor(random(ds_list_size(list)));
    3. image_index=ds_list_find_value(list, index);
    4. ds_list_delete(list, index);

    Und auch hier wieder prüfen.

    #edit: Example angehängt
    Dateien
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von henrik1235 ()