A Flash Developer Resource Site

Results 1 to 3 of 3

Thread: restricting movement from arrow keypad

  1. #1

    restricting movement from arrow keypad

    Hi,

    I am playing around making a little game from a tutorial and i am having trouble trying to limit where the "car" can travel on the screen. At present it has a free range and will disappear out of view if asked to. Can anyone make a suggestion what code i need to add? I have been searching and trying for two hours but just cant get it to work.

    This is what i have at present

    code:

    listener = new Object();
    listener.onKeyDown = function () {
    delete car.onEnterFrame;
    var yval = 0;
    var xval = 0;
    switch (Key.getCode()) {
    case Key.DOWN: yval = 8; car.rotate(30,30); break;
    case Key.UP: yval = -8; car.rotate(-30,30); break;
    case Key.LEFT: xval = -8; car.rotate(-30,30);break;
    case Key.RIGHT: xval = 8; car.rotate(30,30);
    }
    car.onEnterFrame = function(){
    this._y += yval;
    this._x += xval;

    }
    };



    Basically i just want to limit the cars movement to within the track!
    Any help or advice would be greatly welcomed.

    Barry

    EDIT: Added as tags. - jbum
    Last edited by jbum; 10-11-2004 at 03:44 PM.

  2. #2
    Senior Member jbum's Avatar
    Join Date
    Feb 2004
    Location
    Los Angeles
    Posts
    2,920
    Here are two methods you can use:

    Method #1: You can add bounds to your onEnterFrame handler, as follows:

    code:


    // Adjust these numbers to taste
    minX = 10;
    maxX = Stage.width-10;
    minY = 10;
    maxY = Stage.height-10;

    car.onEnterFrame = function()
    {
    this._y = Math.min(Math.max(minY, this._y + yval), maxY);
    this._x = Math.min(Math.max(minX, this._x + xval), maxX);
    }




    This will keep the car within a rectangle specified by minX-maxX and minY-maxY.


    Method #2: If you want to restrict the car to a more complicated shape, then you'll probably want to do a hitTest on the track, like so:

    For example:

    code:

    car.onEnterFrame = function()
    {
    var nx = this._x + yval;
    var ny = this._y + xval;
    if (_root.track.hitTest(nx,ny,true))
    {
    this._x = nx;
    this._y = ny;
    }
    }


  3. #3
    i want a rectangle shape so the first bit of code is fine.

    Thank you very much, people like you are priceless!

    Barry

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center