UI Problems

si99

  • Posts: 12
In a very rough list from most annoying/serious to least annoying:

  • Trying to remove (from the menu) the first item in a block will always remove the entire contents of the block, not the single item you're selecting
  • When creating an actor polygon, it will often make an X value equal to the width of the actor, ie, one pixel off the right hand side - which means you can't grab/move it
  • In the coding palette, under Flow | Advanced, there are two "Code (text)" fields. They appear identical
  • When editing code in an external editor, if you save in the external editor, you then need to save in Stencyl as well (even though Stencyl is aware of the file change, and wipes the previous output) BEFORE you can syntax check. Otherwise it uses the old file contents. If Stencyl is aware, and we've had to save to show Stencyl the new changes (it does pick them up - replacing previous output pane contents with "success" - which is annoying enough as is) wouldn't it also make sense to just automatically use the new file contents for the syntax check?
  • In background (on the mac) you click Delete (the equiv of windows backspace) to delete an image. in an actor, you have to click function-delete (equiv of windows delete key)
  • When a syntax error is found, it would be nice to have focus on the message window, so you could hit enter (on the OK) to close it, not be forced to hit escape.
  • The drag-and-drop coding environment doesn't handle nested loops (or, if this is intentional, warn the user)
  • When publishing to Stencyl arcade, dialog says "would you like to update", and recommends updating. It would be clearer if the suggested button was labelled "Update" instead of "Replace" - some cognitive dissonance surrounded difference between "Publish as New" and "Replace" - particularly none of the dialog text used either of those phrasings.
  • Keyboard shortcuts are a bit off under Mac. Eg Game Settings (Shift+Command+4) is globally mapped by the O/S to print an area of the screen
  • The drag icon on the log viewer is  misleading - you actually need to grab NOT on the icon, or to the right of it, but below the icon. A wider select zone would be much easier
  • On the website, page http://www.stencyl.com/help/view/creating-custom-blocks/ - step 4 has mis-spelt "appearance"

captaincomic

  • *
  • Posts: 6108
Good suggestions.

A few comments:
Quote
The drag-and-drop coding environment doesn't handle nested loops (or, if this is intentional, warn the user)
Nested loops should not be a problem. Do you talk about the "current item" block not referring to the loop from where you dragged it? That's not exactly intentional, but easy to workaround:
http://community.stencyl.com/index.php/topic,18847.0.html

Quote
The drag icon on the log viewer is  misleading - you actually need to grab NOT on the icon, or to the right of it, but below the icon. A wider select zone would be much easier
There will be a new, improved log viewer in the latest build ;)

Quote
On the website, page http://www.stencyl.com/help/view/creating-custom-blocks/ - step 4 has mis-spelt "appearance"
Thanks, fixed.

dripple

  • Posts: 747
Quote
The drag-and-drop coding environment doesn't handle nested loops (or, if this is intentional, warn the user)
Nested loops should not be a problem. Do you talk about the "current item" block not referring to the loop from where you dragged it? That's not exactly intentional, but easy to workaround:
http://community.stencyl.com/index.php/topic,18847.0.html
I ran into similar problems while doing matrix operations. Would be great to allow the change of the loop count attribute or automatically add an identifier if they get nested (should be possible by tracking the nesting).
Sure, my games won't get better with all the new features of Stencyl.
But I do have more fun creating bad ones.


MayazCastle Keeper

si99

  • Posts: 12
Yep, that's exactly what I meant, re nested loops.

Have attached a pic (sorry, without hosting it myself, can't figure how to embed image in the post itself), that shows both the stencyl block and underlying resultant code.

I've dragged one of the "current loop count" variables from each loop, but the code only reflects the inner loop, both times.

Oh, and sorry, was unable to view the work around you linked to.

dripple

  • Posts: 747
The work around is very simple.  Use an attribute to store the value if the outer loop (index0) and refer to this rather than [current loop count]. I do this for all loops, as this makes my code also more readable.
Sure, my games won't get better with all the new features of Stencyl.
But I do have more fun creating bad ones.


MayazCastle Keeper

si99

  • Posts: 12
Given that you can't REFER to the outer loop index0 using "GUI code" (whatever it's called when we're dragging blocks around), wouldn't you then need a code block to set the attribute?

And if you're using a code block anyway, then it's not a huge step (unless you have a ton of code in the inner loop) to just put the whole damn thing in a code block.

I'm always up for cleaner code though, so if you can explain what I'm missing, I'd def appreciate that. Thank you.

dripple

  • Posts: 747
Sorry, I wasn't very specific here. Let me show you an example.

See below both types, the first one is the regular code, if you run is, you will see that the inner loop print statement will always refer to the inner loop (I dropped the outer loop into the left, the inner loop counter into the right).
If you check the source code, you see the code refering to index_1 both times.

The second loop uses a local attribute. I assign the content of the outer loop to this attribute and then refer to the attribute inside the inner loop. See also the source code.



Code: [Select]
        /* "Basic (wrong) loop behavior:" */             
         for (index0 in 0...Std.int(5))
        {
            for (index1 in 0...Std.int(5))
            {
                trace("" + (("" + "Outer Loop:") + ("" + (("" + index1) + ("" + (("" + ", Inner Loop:") + ("" + index1)))))));
            }

        }

Code: [Select]
         /* "Fixed loop behavior:" */             
        for (index0 in 0...Std.int(5))
        {
            _localLoopI = asNumber(index0);
            propertyChanged("_localLoopI", _localLoopI);

            for (index1 in 0...Std.int(5))
            {
                trace("" + (("" + "Outer Loop:") + ("" + (("" + _localLoopI) + ("" + (("" + ", Inner Loop:") + ("" + index1)))))));
            }
        }
    }
Sure, my games won't get better with all the new features of Stencyl.
But I do have more fun creating bad ones.


MayazCastle Keeper

si99

  • Posts: 12
Oh!

That's REALLY clean. And excellently explained (the internal code blocks really helped).

I like it a lot!

Awesome. Thank you so much.

letmethink

  • *
  • Posts: 2545
Or you can literally have a code block that says index0 where you want to put current loop count.
~Letmethink