![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Есть объект, который перемещается по флеш окошку. В этом окошке, есть к примеру один объект, который не позволяет выйти за рамки экрана. Как такой реализовать?
Вроде должно выглядить это таким образом function grani (); if (если объект прикасается к другому объекту){ не позволяем ему его обойти } Как проще всего реализовать такую фичу? |
|
|||||
|
Столкновения можно определять по разному, всё зависит от конкретной задачи. Например есть методы
hitTestObject и hitTestPoint. Возможно вам будет их достаточно. |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Цель простая. В центре флешки объект(который мы перемещаем при помощи клавиш), в моем случае это пока просто прямоугольник. Также на сцене создан объект - квадрат, в роли стенки. Мне надо чтобы при столкновении прямоугольника, с квадратом, прямоугольник не проходил сквозь него, а остановился там, где начинается граница квадрата. Есть какой-нибудь наглядный пример? По ссылке пока ничего не понял, еще пока учусь по книге
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
package { import flash.display.Sprite; import flash.events.Event; public class HitTest extends Sprite { private var _target:Sprite; private var _wall:Wall; private var _isMove:Boolean; public function HitTest() { _target = new Sprite(); _target.graphics.beginFill(0xA83824); _target.graphics.drawRect(0, 0, 50, 50); _target.graphics.endFill(); _target.x = 200; _target.y = 200; super.addChild(_target); _wall = new Wall(50, stage.stageHeight, 0xE1AF48); _wall.x = 500; super.addChild(_wall); this._isMove = true;//флаг указывающий что можно двигаться addEventListener(Event.ENTER_FRAME, enterFrame); } private function enterFrame(event:Event):void { if (_isMove)//если можно то прибавляем к координатам { _target.x += 10; } if (_target.hitTestObject(_wall))//проверяем столкновение и если оно произошло { _target.x -= _wall.x - _target.x - _target.width;//то вычитаем лишнее _isMove = false;//и ставим флаг в "нельзя двигаться" } } } } package { import flash.display.Graphics; import flash.display.Shape; public class Wall extends Shape { /** * Конструктор класса принимает параметры - * * @param width - ширина * @param height - высота * @param color - цвет * * Стоит заметить, что параметры имеющие значения ( у меня это - width:Number=100.. и тд ) * называются "необязательными". То есть создавая экземпляр класс Wall ( стена ) аргументы можно не передавать * и тогда значения определенные в параметрах будут как бы по умолчанию. Так же можно написать width:Number=NaN * но тогда и стена не нарисуется. А если написать width:Number, то при создании экземпляра, придётся ОБЯЗАТЕЛЬНО * передавать аргументы. */ public function Wall(width:Number=100, height:Number=200, color:uint=0x000000) { graphics.beginFill(color); graphics.drawRect(0, 0, width, height); graphics.endFill(); } } } |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Как то слишком много кода, сделал всё по другому и в разы короче. Но все равно спасибо)
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Короче быть не может и при чем меньше кода не значит лучше. я специально Вам сделал с отдельным класом стены, так-как лично у меня в начале были небольшие трудности с классами. может у вас по-другому.
|
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
addEventListener(Event.ENTER_FRAME, loop5); function loop5 (e:Event){ if (right_press) if (object.hitTestObject(wall5)){ object.x -=speed; } if (left_press) if (object.hitTestObject(wall5)){ object.x +=speed; } if (up_press) if (object.hitTestObject(wall5)){ object.y +=speed; } if (down_press) if (object.hitTestObject(wall5)){ object.y -=speed; } } |
|
|||||
|
Banned
[+1 30.08.14]
[+1 26.02.14] Регистрация: Apr 2012
Сообщений: 162
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|