Skip to main content

Cut Thy Polygon

Fruit Ninja is an awesome game.. very addictive.. and fun to play.. but if you observe carefully you will see that where ever you slash the fruit.. it is always cut in half.. It is a simple trick to keep things nice and fast. But imagine if you could cut and slice a fruit every which way you wanted precisely the way you wanted.. this is an idea i had for a while..


  • Slicing enemies into pieces based on slashes.
  • Slicing fruits based on the slashs
  • Creating predefined shapes from a starting shape 
and the list goes on.. and it all starts with a line intersecting a polygon and the polygon being cut into two polygons. Before we go any further here are the screens of how the result will look.

After 1 cut
After two cuts
After 3 Cuts














Now lets get to the most important part.. Cutting a polygon into two pieces.

For each Edge in the polygon:
      if Cut bisects Edge
          Find point of intersection of Cut line and Edge of polygon.
         Add V0 of Edge to left polygon or right polygon based on whether it lies to left / right of Cut line.
         Add V1 of Edge to left polygon or right polygon based on which side it lies on to the Cut line.
         Add the Intersection Point to Left and Right polygons' vertex list.
     else
        Find which side the Edge lies on to the Cut.
        Add the V0 and V1 of Edge to the corresponding polygon's vertex list.


Once you have done this we have two vertex lists one for the polygon to the right of the Cut and one to the left of the Cut. All we have to do now is to create polygon objects from the new vertices so they can be cut further.
I've been working a lot with Cocos2d-x recently so i've implemented it the same.. here is the archive of classes directory for the cocos2d-x project. http://cocos2d-x.org/attachments/1767/PolygonCutting.zip

Screenshots of what you get when you run it..

The initial polygon in white, you can draw arbitrary lines to cut the polygon along that line. The newly created polygons are drawn in red and yellow.

Comments

Popular posts from this blog

Vehicle Physics (Godot 2D)

I've always been fascinated with the vehicle physics used in games. I played so many racing games / the hill climb games and every single time i would wonder wow that must be really hard to do. Thanks to the new generation of game development tools, developing physics based games has become almost a second nature to most people. I didn't want to be left out so i gave it a shot.. I tried setting up vehicle physics in GoDot Engine for a 2D vehicle. Here is what the vehicle scene looks like.. 2D vehicle setup in GoDot As you can see the body collision shape is not right but the rest of the stuff just works. The idea is simple think of what parts move along with the body vs what doesn't. I was kinda stuck setting up the pinJoint2D in GoDot, it actually clearly takes two nodes under the properties. This makes sure that the wheels are hinged to the DampingSpring2D. The Damping Spring2D takes two physics bodies(Body and the PinJoint2D) and makes it work like shock ab

Epic Games Store on Steam Deck

EGS ( Epic Games Store ) like it or hate it, has been giving away free games and if you like free games you would have picked up atleast a couple of them. So given that some of those games are Deck Verified / Playable, its fair to assume you would like to install the EGS on the Deck.  Installing EGS on Steam Deck Switch to Desktop Mode on your Steam Deck Download the EGS installer for windows from the Epic Store website: https://store.epicgames.com/en-US/download (using your web browser of choice)      Open Steam in the desktop mode and add the installer as a non-steam game                                In the browse window, switch from .desktop files to All files. Select EpicInstaller-xxx.msi and add it to steam library. Find EpicInstaller in your steam library and open its' properties by hitting the "Gear" icon on the right side of game details page. Set the proton compatibility to latest one. Now hit the play button and go through the install screens of EGS.  Once t

Flash animations in GoDot Engine

If you have not heard about GoDot game engine,.. you should check it out right away.. godotengine.org Last time, i wrote a blog post about my experience making a simple physics game to GoDot Engine. Though there are a bunch of free options announced during the GDC this year, i thought ill' contribute to the engine. The one piece that is most important for game dev is the pipeline for the engine. One of the most common tools used for 2D animations is Flash. I have been using a library called Super Animation for almost all the games we've made for android at TMG. It's  a  free tool which lets you convert swf files to .sam files. This file can then be loaded in Cocos2Dx using the Open source loader library  https://github.com/raymondlu/super-animation-samples I thought it would be a good idea to port this cpp library to GoDot so that i understand how to write custom modules for the engine. This is the video of the module in action. I have exposed