Spritely [BETA] [UPDATE 2.1] -Develop Your 2D Games

Spritely is a plugin designed to make 2D game in Roblox, simple and intuitive. With Spritely, you can draw your own sprites, create custom objects, and bring your 2D game to NEXT LEVEL.
Get Started with Spritely
Install the plugin now and start building your 2D game directly in Roblox Studio with powerful, easy-to-use tools.

Spritely Link

About the Beta
Spritely is currently in beta. The editor may still have bugs, and your feedback will help improve its performance and stability. My goal is to make this tool as efficient and user-friendly as possible.

There’s still a lot to refine, but here’s what Spritely already offers:

  • Pixel-Based Collision Detection
    Accurate collision based on sprite pixels, fully supporting rotation and scaling.
  • Animation Player
    Play animations at your chosen frame rate (FPS).
  • Sprite and Animation Editor
    A built-in editor to draw and animate your own 2D sprites.

Roadmap – What’s Coming Next

  • Physics system
  • Layer system for the editor
  • Improved selection tools
  • Normal map support (based on my DepthUI example)
  • Interactive lighting

Got suggestions? I’d love to hear them.

IMPORTANT
:warning::warning:Free To USE. If you want to donate to me, you can do it :smiley: :warning::warning:

-50 Robux

How to Use
The plugin automatically adds a ModuleScript to your game. This script currently includes four main methods you can use to bring your 2D objects to life.

Module Methods

  • CreateObject(ImageLabel, SpriteFolder, Frame)
    Registers an ImageLabel or ImageButton as a 2D sprite object.
    • ImageLabel (or ImageButton): The UI instance to register for use with the module.
    • SpriteFolder: The name of the sprite in the sprite folder (string). If no sprite with that name is found, the method is canceled.
    • Frame: The initial frame to display. If nil, it defaults to frame 1.

  • SetFrame(ImageLabel, Frame)
    Changes the current frame of a sprite.
    • ImageLabel (or ImageButton): The UI instance to update.
    • Frame: A numeric frame index. If the frame doesn’t exist in the animation folder, the function is canceled.

  • IsTouching(Image1, Image2)
    Checks for pixel-perfect collision between two sprite instances.
    • Image1: The first ImageLabel or ImageButton.
    • Image2: The second ImageLabel or ImageButton.
      :warning: Note: This method is not optimized for high-resolution images. Alternative collision modes (Box, Radial, Hull) are currently in development.

  • PlayAnimation(ImageLabel, Properties)
    Starts playing the animation of a registered sprite.
    • ImageLabel: The registered UI instance. If the instance was not created using CreateObject, the animation will not play.
    • Properties: This is an array with (currently) 3 indices.
      [“Loop”]:boolean;
      [“Orrevide”]:boolean;
      [“FPS”]:number

  • StopAnimation(ImageLabel)
    Stops the animation currently playing on a registered sprite.
    • ImageLabel: The registered UI instance.

  • ChangeProperties(ImageLabel,Properties)

    • ImageLabel: It is the ImageLabel/ImageBUtton that has been registered with the CreateObject function, this will be the instance whose animation properties will be changed.
    • Propierties:Array with the values ​​you want to change, it is not necessary to send the 3 current properties, the script will read the table index and decide how to change the properties

:warning: Known Issues and Warnings

The editor is undergoing a full revamp, so some issues may appear. I’m actively working to provide the best possible experience.

  • There is a strange bug when the brush is at its minimum size: certain pixels may become invisible but still exist, which can affect the final image.
  • When scaling ImageLabel or ImageButton objects too much, collision detection may lose a bit of accuracy (though very slightly).
  • The selection tool in the editor can be a bit unintuitive to use.
  • The color picker feels a bit odd at the moment.
  • Line drawing is not yet implemented.
  • You cannot yet change the brush shape (square or circular).
  • The layer system is still very early in development, but I can finish it quickly if I see strong interest from the community.
  • There is a strange bug where you cannot draw on the last row or column of the canvas.
  • Editor zoom is not dynamic—it only zooms into or out from the center of the image.


Example to use:
Tester.rbxm (8.2 KB)

That’s all for now—hope you enjoy using Spritely!
Feel free to send feedback. (Sorry for my bad English :sweat_smile:)

9 Likes

I’ve changed my plans; the plugin will be free, and I’ll create a GamePass for those who want to donate (Optional).

What do those who have read the Post think?

3 Likes


;-; ok roblox

1 Like

Is it obfuscated? If so, you will probably have to un-obfuscate it.

Done. LoadAsset() shouldn’t be used by plugins. The plugin is now public and free for everyone.

[Update 2]

Reread the methods, as several parameters have changed.

-PlayAnimations(ImageLabel,Properties)

ImageLabel: This is the UI object that will play an animation.

Properties: This is an array with (currently) 3 indices.
*[“Loop”]:boolean;
*[“Orrevide”]:boolean;
*[“FPS”]:number

If this parameter is null, it will use a default configuration.

New Parameter
-ChangeProperties(ImageLabel,Properties)

ImageLabel: It is the ImageLabel/ImageBUtton that has been registered with the CreateObject function, this will be the instance whose animation properties will be changed.

*Propierties:*Array with the values ​​you want to change, it is not necessary to send the 3 current properties, the script will read the table index and decide how to change the properties.

[UPDATE 2.1]

Improvements:

  • Collision detection has been optimized, it will only read pixels if the UI Objects overlap.

Errors:

  • In development: Collision detection is inaccurate when the Size property uses type Scale . [SOLVED]

the name sounds like lunchly im sorry but it sounds like it

Not to be rude, but -ly is a suffix, and it is used to form adjectives and adverbs. It is used when something is similar to the word it is formed from. E.g. earthly, quickly, simply, etc. By your logic, the word “simply” sounds like Lunchly.

1 Like

My native language is Spanish, I use the suffix as a play on words; also, I just found out about the existence of “Lunchly” XD

1 Like

chill out bruv :sob::pray:

fnksjdlnfkujanelkfnu