I've been spending some time on the latest version of Hopscotch and wanted to share some comments and suggestions.
Most of the comments are based on the following project which I've decided to stop since it was becoming too annoying to work on (see comments below ): https://c.gethopscotch.com/p/yh311rqd1
The goal of this project was to create word games for my kid (hangman, spell a word, etc.). I previously had a project where the word to spell was embedded in the objects, but now that we have "self" member variables, it made it possible to have a keyboard to enter the word.
So, let's start with the comments!
- I find it extremely frustrating that the order of events (red boxes) inside objects is not saved properly. As soon as we leave the object and go back to edit it, the events are instead sorted in creation order, which makes it difficult to find an event when there are lots of them inside the object!
- In my opinion, cloning should clone the current state of the object, including its position, size, color, rotation and its variables. Most of the time, I want to prepare my object and then clone it without having to set everything up on the clone again (e.g. cloning a really small, red, 45-degrees box multiple times).
- One of the main reason I stopped working on the project above is that the editor is now extremely unresponsive. For example, when I try typing any value (Set Size, etc.), it takes more than 1 second before the digit appears and I can use the keyboard again! There's not that many objects in the editor, and such a change should not be affecting other objects in memory while editing, so I'm very surprised by how slow this is.
- It would be nice to have a button that we can click to collapse everything (all events, or all boxes inside an event, etc.) to help with readability when there are lots of instructions and events.
- When we have to change multiple properties of an object (e.g. when the state of the game changes), having all these changes being processed over multiple frames makes the game less responsive. It would be interesting to have a special "blue" block which would process as many instructions as possible in a single frame, e.g. until it encounters a repeat or wait block.
Deleting Runtime Objects
- Is there any reason why Hopscotch does not offer a function to delete objects at runtime? It seems pretty bad to have to keep everything around when we don't use them anymore, and can cause performance to reduce over time with games offering a "restart" feature, or infinite gameplay.
- Clicking a new button could bring up a "Debug View" with the list of all objects currently alive. A filter could be enabled to view only the list of "visible" objects (not fully transparent), and clicking on an object could display the list of all object variables with their values. This debug view should also include the special/global "phone" object to be able to watch the global variables. I know this is an advanced feature, but it would make it a lot simpler to debug complex games
- Well, this is pretty specific to word games, and it's been quite long to create all the alphabet letters in my project (basically handled by clones, which position themselves, with some event to toggle between uppercase and lowercase). This project could be a lot easier with a few extra features:
- Text variables. These would have a different color, and could be set to and from Integer variables. Self.Text should exist by default and provide access to the text of the object which can be modified by Set Text.
- Text functions. With text variables, it would be great to have functions like "Concatenate(textVariable1, textVariable2)", "ToLower", "ToUpper", etc.
- ASCII functions. I couldn't find a better way to handle this, apart from the Keyboard feature explained below, but basically, how could someone create a virtual keyboard through an iteration? One way would be to be able to generate a Char from its ASCII Integer Value (e.g. 65 for the letter A).
- Lastly, with Text Variables, there could be a "ShowKeyboard(textVariable)" function to display the native OS keyboard. The keyboard would work using the specified variable as its buffer. This would allow very easy and user-friendly input of text variables for the user.
Note that I am using an iPhone 5S.
That's pretty much it for now. Let me know what you think!