Limiting drag and drop movement for a game in Flash CS3 with ActionScript 3

Post to Twitter

Sometimes its useful to limit drag and drop of an object to an area you define. For example, lets say you are building a game in Flash CS3 and are allowing the player to move their character around in a dungeon via drag and drop. They click on their character and begin to move them about however you want to only allow them to move a certain distance.

In this case I’ll use a simple green circle to represent the character and when you press and click on it to drag it you will see a gray square show that indicates the area you can move within per turn.

[ad name=”Google Adsense”]

This can be easily accomplished with a little ActionScript:

import flash.events.Event;
import flash.events.MouseEvent;

var currentX:Number;
var currentY:Number;
var currentOldX:Number;
var currentOldY:Number;

player1_mc.buttonMode = true;
player1_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseEventDown);
player1_mc.addEventListener(MouseEvent.MOUSE_UP, mouseEventReleased);


player1Mask_mc.x = player1_mc.x;
player1Mask_mc.y = player1_mc.y;

var lastChildIndex:int = 0;

function mouseEventDown(evt:MouseEvent):void
{
	currentX = player1_mc.x;
	currentY = player1_mc.y;
	currentOldX = player1_mc.x;
	currentOldY = player1_mc.y;

	var r:Rectangle = new Rectangle(currentX - 50, currentY - 50, currentX + 50, currentY + 50);
	var square:Shape = new Shape();

	square.graphics.lineStyle(1, 0xEEEEEE);
	square.graphics.drawRect(currentX - 40, currentY - 40, 80, 80);
	square.graphics.endFill();
	this.addChild(square);
	lastChildIndex = this.numChildren - 1;

	player1_mc.startDrag(false, new Rectangle(currentX - 40, currentY - 40, 80, 80));
}

function mouseEventReleased(evt:MouseEvent):void
{
	evt.target.stopDrag();
	player1Mask_mc.x = player1_mc.x;
	player1Mask_mc.y = player1_mc.y;
	this.removeChildAt(lastChildIndex);
}

When the player moved their character I trace a square to the area they are confined to, normally in a game you wouldn’t do this but I put the square in to make it more clear how they are constrained.

One quick note: if you over extend the drag the little gray square doesn’t always erase but since that won’t ever be visible in a real game the code that manages it can be removed as its only here to allow us to visibly see the movement constraint.

[ad name=”Google Adsense”]

Post to Twitter

This entry was posted in ActionScript, Flash. Bookmark the permalink.

One Response to Limiting drag and drop movement for a game in Flash CS3 with ActionScript 3

  1. Elvis Oliveira says:

    Please, republish the example if possible, i’m having some problems with this, and i believe it could help others too.

Comments are closed.