Adventure Game Studio

AGS Support => Advanced Technical Forum => Topic started by: Dualnames on Sun 26/02/2012 16:33:32

Title: Drawing pixel/line skips. (SOLVED THANKS TO DKH)
Post by: Dualnames on Sun 26/02/2012 16:33:32

///WIRING  GUI////

wiringbomb=GUIControl.GetAtScreenXY(mouse.x, mouse.y);
if (gWiring.Visible==true)
{
 if (wiringmode=="draw")
 {
   if (wiringbomb!=null)
   {
     if (wiringbomb==bwirea)
     {
       //drawline
       if (Game.DoOnceOnly("tempmeasure"))
       {
         area=DynamicSprite.CreateFromExistingSprite(1229, true);
       }
       
       wirea=area.GetDrawingSurface();
       wirea.DrawingColor=64512;
       if (wirea.GetPixel(mouse.x, mouse.y)!=64512)
        {
        wirea.DrawLine(mouse.x,mouse.y, (mouse.x), (mouse.y));
       }
       wirea.Release();
       bwirea.NormalGraphic=area.Graphic;
     }
     else
     {
       //don't draw
     }
   }
 }
}
///WIRING  GUI////


wiringmode is a string
wiringbomb is a Guicontrol
area is a Dynamic sprite
bwirea is a gui button


The premise of this code is to draw on a gui button's graphic. And this works fine. The issue is that if mouse speed increases the drawing breaks. I'm not sure if that is coming across but the problem lies that if mouse speed is increased to a certain point, instead of drawing like this

____________

the drawing is like this
------------------

Aka it skips. Is there any way to fix that or somewhat help me limit the mouse speed? Supposedly the function should work. I even placed it a repeatedly_execute_always(). I even tried replacing line with pixel but the issue remains. I'm using line instead of pixel, because DrawPixel is a bit more slow.
Title: Re: Drawing pixel/line skips.
Post by: DoorKnobHandle on Sun 26/02/2012 16:46:54
Store the mouse position every frame, then draw a line from the position where the mouse was last to the current position.
Title: Re: Drawing pixel/line skips.
Post by: Dualnames on Sun 26/02/2012 17:05:05
Something that needs to be mentioned is that I'm not using clicks of the mouse to draw the line, when the player clicks on a button wiringmode is set to "drawing", so I'm using the mouse position.
Title: Re: Drawing pixel/line skips.
Post by: DoorKnobHandle on Sun 26/02/2012 17:19:28
I'm not sure if your post is a reply to my solution, but just to make sure, the method doesn't rely on you using clicks in any way, shape or form... :)

Let me know if I wasn't clear enough on how it works!
Title: Re: Drawing pixel/line skips.
Post by: Dualnames on Sun 26/02/2012 17:25:55
Somehow what you suggested, doesn't work. It still skips. Perhaps I did it wrong, so here goes what I did.
I apologize in advance if i did this amazingly wrong.

int gx,gy;

function repeatedly_execute_always()
{
gx=mouse.x;
gy=mouse.y;

///WIRING  GUI////

wiringbomb=GUIControl.GetAtScreenXY(mouse.x, mouse.y);
if (gWiring.Visible==true)
{
  if (wiringmode=="draw")
  {
    if (wiringbomb!=null)
    {
      if (wiringbomb==bwirea)
      {
        //drawline
        if (Game.DoOnceOnly("tempmeasure"))
        {
          area=DynamicSprite.CreateFromExistingSprite(1229, true);
        }
       
        wirea=area.GetDrawingSurface();
        wirea.DrawingColor=64512;
        if (wirea.GetPixel(mouse.x, mouse.y)!=64512)
         {
         wirea.DrawLine(gx,gy, (mouse.x), (mouse.y));
        }
        wirea.Release();
        bwirea.NormalGraphic=area.Graphic;
      }
      else
      {
        //don't draw
      }
    }
  }
}
///WIRING  GUI////
}
Title: Re: Drawing pixel/line skips.
Post by: DoorKnobHandle on Sun 26/02/2012 17:32:21
That:


gx=mouse.x;
gy=mouse.y;


Needs to be at the end of that function, then it should work!
Title: Re: Drawing pixel/line skips.
Post by: Dualnames on Sun 26/02/2012 17:35:00
Ohh...damn my stupidity. Thanks a lot man, I owe you one.  :D :D :D