Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прикосновение с объектами. (http://www.flasher.ru/forum/showthread.php?t=142410)

dkrstudio 20.07.2010 17:09

Прикосновение с объектами.
 
Логичный код
Код:

if (MyCar.hitTestObject(area_mc))
{
// Какой сюда код нужно прописать?
}

На сцене. есть символ. которым можно управлять - MyCar.
Также еcnm путь - траектория, по которому нужно переместить объект "MyCar", Остольное пространство - мовик или графика - area_mc, Какой код нужно прописать и что должно происходить на сцене когда MyCar соприкасается с area_mc? Перемешать на начальные координаты сразу нет. Как зделать от талкивание. и как это происходит с кодом в as3

Tr1te 20.07.2010 17:30

В момент столкновения приложить в противоположную сторону силу. Третий закон Ньютона.
Код за вас, тут врятли напишут.

dkrstudio 20.07.2010 17:38

а код та какой? я всего неделю пишу на flash. Как писать этот закон.законы? Первый закон
"Тело находится в сосоянии покоя пока на него не действуют другие тела или Силы действуюши на тело равны по модулю" Второй "Произведение ускорения и массы пропорционально равно силе трения плюс произведение массы и g=9.8 "как то так""


Третий закон Ньютона: две любые материальные точки взаимодействуют друг с другом с силами, направленными по прямой, соединяющей эти точки, равными по величине и противоположно направленными
http://www.toehelp.ru/theory/ter_meh/image032-8.gif

Добавлено через 23 минуты
Для тех у кого такой же будет вопрос, скидывайте сюда ссылки на описание любой физики в гоночных играх
http://siliren.ru/content/view/55/5/

Добавлено через 2 часа 28 минут
http://black-zorro.com/mediawiki/FOA...ipt_3._Часть_1

http://animbook.mirmap.com/content/view/31/43/

Читайте название не требуется

Tr1te 21.07.2010 00:18

Цитата:

Сообщение от dkrstudio (Сообщение 923690)
а код та какой? Как писать этот закон.законы?

Если не хочешь сам разбираться как писать, то нужно подробно описать тз, что именно хочешь получить в итоге, предложить вознаграждение, и ждать пока кто нить согласиться написать за вознаграждение.

Может есть и другие способы.

expl 21.07.2010 00:29

Вообще там много подходов к физике, и применение 3-го закона ньютона - не самый удачный.
Лучше физический движок аля Box2d попробуйте заюзать
А что-то узнать по физике можно на http://gamedev.ru/

-De- 21.07.2010 00:39

Вот кстати http://animbook.mirmap.com/content/category/6/18/43/ было ж и про столкновения.
И мне что-то подсказывает, что Tr1te не сможет через 3-й з-н Ньютона рассчитать столкновение, все же скорость меняют, а не силу =)

Hidest 21.07.2010 01:54

Не хочу никого обидеть, но мне кажется, что у топикстартера опыта очень мало, иначе не возникло бы такого вопроса. Box2d дело хорошее, но сразу новичку его не освоить, но и советы про третий закон ньютона тут тоже не помогут. Совет один - читать побольше литературы про имитацию физики (и пока особо не важно, на каком языке реализация в ней предлагается).

dkrstudio 21.07.2010 03:22

Hidest +
На самом деле Лето. не очень то хочется в жару дома сидеть и юзать инет. Но меня реально заинтересовал Action Script 3.0 Я и раньше Часто посматривал сюда, но все обходился Хорошей графикой, HTML, CSS, Jquery. Да материала в инете мало было по AS3. Но тут зацепила идея, что поделать.
На http://animbook.mirmap.com есть статья. Все на Action Scruipt 2.0
Год назад у меня был PDF файл с этой книгой, может если поискать на дисках то и щас найду. Статья старая но все же это именно то что надо. описывает все то что хотелось бы спросить.
http://rutracker.org/forum/viewtopic.php?t=1874555
Образ к книге.
Но вот в чем проблема. Я не настолько нуб чтобы думать что если я зделаю ту игру которую выбрал своей первой): то она будет такая как я хочу. я прекрасно понимаю что flash грузится очень просто. и даже сейчас fla файл весит 34 кило байта. но учитывая что каждый update кадров передается значение скорость (очень малая) плюч к этому добавить классы с физикой. Игра будет виснуть. Второе то что я не хотел бы чтобы. ролик не был похож на типичный проект. где смена карты происходит из за условия достигнет обьект края и выезжает с противоположного (надеюсь понятно описал). Я бы хотел чтобы положение машыины всегда остовалось 90 градусов а вот поворот сцены менять но тут проблема с картой.

Добавлено через 2 минуты
Цитата:

Сообщение от -De- (Сообщение 923783)
Вот кстати http://animbook.mirmap.com/content/category/6/18/43/ было ж и про столкновения.
И мне что-то подсказывает, что Tr1te не сможет через 3-й з-н Ньютона рассчитать столкновение, все же скорость меняют, а не силу =)



Да, но как я написал ускорение на массу равно сила. Второй закон тогда получается а там уже и третий. Короч ТерМех, но я же нормальный человек и как у всех по ТерМеху у мну 3

ins_nsk 21.07.2010 10:03

рукарожа.жпг

http://www.emanueleferonato.com/2007...game-tutorial/

на as3 перевести не так сложно. тем более если заглянуть в более поздние туториалы, там есть частичный перевод.

Tr1te 21.07.2010 12:52

Вложений: 4
O God. Ну вы слишком боитесь физики, а там нет ничего сложного. Я посмотрел пример который был по ссылке,
машинка там движется просто отвратительно. Если ты хочешь как там то можешь просто переписывать как там.
Если ты хочешь NFS, то придется немного по разбираться, но ты не бойся это не сложно.

Тут все просто третий закон ньютона. Описывается легко. Жаль сюда нельзя вставлять картинки, ну придеться
скачаивать. В картинке №1 (До столкновения), машина летит в стену. И у нее есть скорость которую ты
описываешь. Когда ты описываешь движение машины, ты расскладываешь скорость на вектора, по Х и по У.

Код AS3:

radian = (gradus * Math.PI)/180;
speedX=speed*Math.cos(radian);
speedY=speed*Math.sin(radian);

На картинке я сделал тоже самое.Ну а третий закон ньютон:
Сила действия равна по модулю и противоположна по направлению силе противодействия.
После столкновения (Картинка №2), твой вектор скорости по х будет направлен в противоположную сторону. Он
изменит направление. В коде тебе надо просто домножить на -1, это же не сложно. При всем при этом скорость
по У останеться неизменной, а для этого тебе надо в коде сделать... да ничего с ней не делать.
Но это если абсолютно упругий удар.
Если ты хочешь делать абсолютно НЕ упругий удар. Надо домножить! на коэффициент упрогости, в данном случае
0. И твоя машина просто остановиться по Х. НО по У она продолжит движение. и будет двигаться вдоль стенки.
В реальной жизне этих крайних случаев не бывает, коэф упругости находиться между ними, между 0 и 1.
Например если ты сделаешь коэф 0.5, то это значит что твой вектор по оси Х будет 50 процентов от своей
велечины, тоенсть в 2 раза меньше Картинка №3. ИЛи ты сделаешь коэф 0.2, и тогда длинна вектора будет 20
процентов от нормальной длинны. В этом случае машина отскочит от стены, но не сильно. НАдо просто
домножить на коэф, это тоже не сложно.

Но почему машина останавливается при соударении со стенкой? Изза того, что о стенку есть трение. НУ я
думаю что тут не сложно догадаться, что скорость по оси У, в твоем случае она звузит speedY, надо
уменьшить на силу трения, а сила трения это сила реакции опоры умноженная на коэф трения. Это значит чем
сильней твоя машина влетит в стену, тем больше трения будет, тем больше она затормозит об стену, что
абсолютно логично и без формул. В твоем случае можешь просто поступить так, у тебя есть скорость по оси Х,
можно считать ее реакцией опоры, и умножать на коэффициент. Это и будет твоя сила, (Коэф меньше единицы)
Это означает что у тебя есть speedY из которую надо уменьшить на силу трения. Если у тебя машина движеться
вперед, то скорость по У положительная, и надо вычитать силу трения, а если машина двигалась назад, и
ударилась об стену, то скорость машина отрицательная, и значит надо прибавлять силу трения. Короче
скорость надо всегда уменьшать. В случае движения машины вперед: speedY - WallFriction (Это трение о
стену.), а WallFriction=speedX*m, m - это твой коэф. сам подберешь. Но вообще для всех поверхностей он
гостированный, и можешь легко найти в нете.

Ребята из Electronic Arts пошли еще дальше. У них машина разворачивается при столкновении. Ну это
происходит из-за трения. ТОесть получается так, что Все эти силы скоростей действую из центра масс, Ну примерный центр машины/коробки и тд. а сила трения реакции опоры, они действуют в точке соприкосновения. И это означает что та точка машины которая соприкосается со стеной, тормозит, а импульс у машины остался, и скорость его тянет вперед, только уже в другом месте, в центре машины, что создает момент вращения вокруг точки соприкосновения. Ну и разворачивает машину. Картинка #4.

НУ это как бы все изложено упрощенно, и не рассматриваются более замороченные моменты. ТАк что думай, что ты хочешь получить от игры.

dkrstudio 21.07.2010 13:36

Вот она беда россии. мы часто смотрим на запад. Терпеть не могу переведенные уроки. и туториалы:confused:
Все таки я надеялся что Adobe будет учить русский и это свершилось. хотя у нас таких программ не было и небудет. именно из за тутореалов. (гадость)
Пока что я понял что в as3 рулит addEventListener (который слушает события и затем идет функция) затем идет физика. и вроде все понятно.
Второй день юзаю 1-6 главы Книги где игры пишут на as2 там совершенно другой подход. конвертер выдает не понятный класс, так что это бессмысленно. но сохраняется тоже после наступления действия чтото происходит.

Добавлено через 23 минуты
я не боюсь разбиратся. я же сказал что разбил процес на части. Теперь та чась котороя определяет Обнаружение столкновения для сложных фигур в as3 (узнал что это математика, тригонометрия. в идеале) для начало нужно было просто задать скорость вперед назад и зделать чтобы обьект поворачивал при нажатии в лево и вправо. потом определять столкновнеия. Как я убедился
Код AS1/AS2:

if (MyCar.hitTestObject(area_mc))
{
// Какой сюда код нужно прописать?
}

Не подходит потому что вокруг обьектов образуется не видимый прямоугольник так сказать. Теперь дело за математикой. (Силы трения, Скольжения, Тяжести все это просто, о я пока еше новичек в програмировании игр. это для создания сайта или меню испольуя xml все кажется просто, когда же ты не делю мутиш с кодом и получаеш движение, это кажется самое лучшее и о таких силах просто забываеш. Пугают классы и интерфейсы которые предлагают зарубежные разработчики)
вот как определить количество столкновений с 4 линиями обьекта машины. (Да и сама эта идея выглядет не реалестично, а проверять на столкновения со всеми гранями обьекта. муторно) да и потом? Проверять весь путь который пройдет машина (трассу?) а кривые? находить все уравнения? может есть другой вариант?

Добавлено через 24 минуты
Вот это уже AS3/ но тоже разработка запада

hartman 21.07.2010 15:41

Напишите конкретно что надо сделать, без лирических отступлений о том как все сложно. Что уже есть, что не получается? По моим догадкам вы хотите смоделировать двумерное движение + столкновения.
hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean может проверять пересечение объекта с точкой. То что вы называете невидимый прямоугольник это габаритный контейнер объекта, можно проверять пересечение не с ним, а с сами объектом, для этого shapeFlag задаем равным true. Потом рисуете, например, ограждение трассы сложной формы, а на машине устанавливаете несколько точек для проверки пересечения hitTestPoint.
вот тут так сделано, только это AS2 (метод hitTest()): http://tester.kiti-art.ru/flash/fish5.html

ins_nsk 21.07.2010 16:31

Цитата:

Вот она беда россии. мы часто смотрим на запад.
Цитата:

Пугают классы и интерфейсы которые предлагают зарубежные разработчики)
Ну да, надо чисто по-российски, топором да на медведя. Лучше на basic'е :)

Tr1te 21.07.2010 16:56

Цитата:

Сообщение от dkrstudio (Сообщение 923838)
Вот она беда россии. мы часто смотрим на запад.

На запад смотрим, потому что они далеко вперед ушли.

dkrstudio 22.07.2010 05:52

Вложений: 1
Мда. хреновый из меня физик и програмист. буду юзать с самого начала физику.

dkrstudio 26.07.2010 05:37

C самого начала
 
Извените за лирику. но мне перегрели мозг. спасибо трайтону и всем кто помог советом сделать наподобие макета неделю назад. сейчас же я вообще ни чего не могу понять. не говоря о столкновениях.

Код:

var s:Number = 10;//Максимальная скорость
var a:Number = 0.3;//Полное ускорение
var b:Number = 3;//Задняя скорость
var m:Number;//Масса
var f:Number = 0.95;//Трение, обшее
var sX:Number = s * Math.cos(radian);//Скорость по x
var sY:Number = s * Math.sin(radian);//Скорость по y
var gradus:Number = -45;//Градусы
var G:Number = 3;
var radian:Number = (gradus * Math.PI)/180;//Радианы




//***Boolean***
var left:Boolean;
var up:Boolean;
var right:Boolean;
var down:Boolean;
var back:Boolean;
//***Отслеживание клавиш***
stage.addEventListener (KeyboardEvent.KEY_DOWN, key_down);
function key_down (e:KeyboardEvent):void
{
        if (e.keyCode == 37)
        {
                left = true;
        }
        if (e.keyCode == 38)
        {
                up = true;
        }
        if (e.keyCode == 39)
        {
                right = true;
        }
        if (e.keyCode == 40)
        {
                down = true;
        }
        if (e.keyCode == 32)
        {
                back = true;
        }
}

stage.addEventListener (KeyboardEvent.KEY_UP, key_up);
function key_up (e:KeyboardEvent):void
{
        if (e.keyCode == 37)
        {
                left = false;
        }
        if (e.keyCode == 38)
        {
                up = false;
        }
        if (e.keyCode == 39)
        {
                right = false;
        }
        if (e.keyCode == 40)
        {
                down = false;
        }
        if (e.keyCode == 32)
        {
                back = false;
        }
}
//***Движение***
addEventListener (Event.ENTER_FRAME, moveHero);
function moveHero (e:Event):void
{
        hero.rotation = gradus;
        if (up)
        {
                sX-=a;
        }
        if (down)
        {
                s+=a;
        }
        if (left)
        {
                gradus-=G;
        }
        if (right)
        {
                gradus+=G;
        }
        if (back)
        {
                hero.x++;
        }
}

Начал снова. с простого квадрата.

Цитата:

if (back)
{
hero.x++;//!!
}
не считать. просто копия
Угол поворота понятно как задавать. но я теперь не могу разобратся как сохранять поворот при движении.
После свойства rotation
Код:

hero.x += sX;
hero.y += sY;

и ничего нет на сцене.
в условии Up и Down
Увеличивать на a // Ускорение
и до условий умножать на f//Трение
ни чего на тесте флешки не выводится (тобись нет ничего). Правда надоела мне игра. но я не здамся. даже учебник алгебры нашел за 7 класс и кроме как того что ускорять нужно правдоподобное ускорение машины с ступенчатой передачей. соответсвенно клавиши 1. 2. 3. 4. 5. и задняя скорость. Но правда не понимаю. аномальная жара плавит мозг подскажите ПЛЗ

Tr1te 26.07.2010 10:41

Я тут както вопроса не увидел. И поясни, пожалуйста, что ты имеешь ввиду под: "но я теперь не могу разобратся как сохранять поворот при движении."

Что ты под этим подразумеваешь.

hartman 26.07.2010 12:49

dkrstudio, этот код и не должен ничего выводить, там просто меняются переменные.
Поворот машины штука относительно сложная по сравнению с учебником алгебры за 7 класс. Вам нужна "механика", раздел называется "динамика". Там показывается, что любое движение тела можно разложить на поступательное движение центра масс и вращение вкруг оси, проходящей через центр масс...

dkrstudio 26.07.2010 16:10

Вот код который я писал в начале. все вроде работает. кроме кучи багов. хоть щас на сцену

Код:

// Типа boolean
var up:Boolean=false;
var down:Boolean=false;
var left:Boolean=false;
var right:Boolean=false;
var brake:Boolean=false;
// Клавиша нажата
stage.addEventListener(KeyboardEvent.KEY_DOWN, key_Down);
function key_Down(e:KeyboardEvent):void {
        if (e.keyCode==38) {
                up=true;
        }
        if (e.keyCode==40) {
                down=true;
        }
        if (e.keyCode==37) {
                left=true;
        }
        if (e.keyCode==39) {
                right=true;
        }
        if (e.keyCode==32) {
                brake=true;
        }
}
// Клавиша отпушена
stage.addEventListener(KeyboardEvent.KEY_UP, key_Up);
function key_Up(e:KeyboardEvent):void {
        if (e.keyCode==38) {
                up=false;
        }
        if (e.keyCode==40) {
                down=false;
        }
        if (e.keyCode==37) {
                left=false;
        }
        if (e.keyCode==39) {
                right=false;
        }
        if (e.keyCode==32) {
                brake=false;
        }
}
 
addEventListener(Event.ENTER_FRAME, movieCar);
// Переменные
var power:Number=0.3;
 
var friction:Number=0.95;
var braking:Number=0.85;// тормоз
var deceleration:Number=0.87;
var speed:Number=0;
 
var maxSpeed:Number=10;
var maxDownSpeed:Number=1;
 
var gradusRot:Number=2.4;
var gradus:Number=0;
var radian:Number;
var speedX:Number;
var speedY:Number;
 
function movieCar(e:Event):void {
        if (up) {
                speed+=power&&speed<maxSpeed;
        }
        if (down) {
                speed-=power;
                //speed = -1;
        }
        if ((left) && (up) || (left) && (down)) {
 
                gradus-=gradusRot;
        }
        if ((right) && (up) || (right) && (down)) {
 
                gradus+=gradusRot;
        }
        if (brake) {
                speed*=braking;
 
        }
 
        radian = (gradus * Math.PI)/180;
        speedX=speed*Math.cos(radian);
        speedY=speed*Math.sin(radian);
        MyCar.rotation=gradus;
        MyCar.x+=speedX;
        MyCar.y+=speedY;
 
 
        var MyCarW:Number=MyCar.width/2;
        var MyCarH:Number=MyCar.height/2;
        /*координаты сцены + половину ширины или высоты обьекта*/
        if (MyCar.x>550+MyCarW) {
                MyCar.x = 0 - (MyCarW);
        }
        if (MyCar.x < 0 -(MyCarW)) {
                MyCar.x=550+MyCarW;
        }
        if (MyCar.y>600+MyCarH) {
                MyCar.y = 0 - (MyCarH);
        }
        if (MyCar.y < 0 -(MyCarH)) {
                MyCar.y=600+MyCarH;
        }
 
}

Только объект MyCar создать. Баги есть но работает!
Правда не могу понять. При нажатии лево/право я увеличиваю gradus obj поворачивается на него.
Скорость разложена на

Код:

        speedX=speed*Math.cos(radian);
        speedY=speed*Math.sin(radian);

при нажатии вперед / назад скорость увеличивается на power/ тока не могу теперь понять как уваеличивать скорость в пределах от нуля до (допустим) 3. от 3 до 6, с 6 до 10. и как в любой момент времени реализовать торможение тобись направленное (не знаю как по другому) снижении скорости от n (где n скорость) до 0.???????????????????\



И второй вопрос. не мучайте меня подскажите. может сразу в классы пакеты или как там (я еще не разобрался в них) ведь создаю игру и в ней будут машины. хотя бы те которыми будет управлять один игрок. так как это все дело запихнуть в классы и загружать на сцену в определенные координаты?

hartman 26.07.2010 20:13

Со второго вопроса нужно было начинать. Почитать документацию и сделать хоть пару примеров, там все вполне доступно и есть исходники.
А по поводу первого, вы понимаете что происходит в этой строке: speed+=power&&speed<maxSpeed;? Тут наверное нужен условный оператор.

dkrstudio 27.07.2010 04:41

Код AS3:

//*****Переменные*****
var speed:Number = 0;
var maxSpeed:Number = 5
var gradus:Number = 0;
var G:Number = 3;
var radian:Number = (gradus * Math.PI)/180;
var speedX:Number = speed * Math.cos(radian);
var speedY:Number = speed * Math.sin(radian);
 
var a:Number = 0.4;//Ускорение
var friction:Number = 0.97;
 
//*****Переменные*****
 
//***Координаты***
MyCar_mc.x = 100;
MyCar_mc.y = 100;
//****Маркеры*****
var up:Boolean;
var down:Boolean;
var left:Boolean;
var right:Boolean;
//****Маркеры*****
addEventListener (Event.ENTER_FRAME, moveMyCar_mc);
function moveMyCar_mc (e:Event):void
{
 
if (up) {
                speed+=a&&speed<maxSpeed;
        }
        if (down) {
                speed-=a;
                //speed = -1;
        }
        if (left)
        {
                gradus = gradus - G;//MyCar_mc.x -= speed;//MyCar_mc.x = MyCar_mc.x - speed;//speedX -= a;
        }
 
        if (right)
        {
                gradus = gradus + G;//MyCar_mc.x += speed;//MyCar_mc.x = MyCar_mc.x + speed;//speedX -= a;
        }
        MyCar_mc.rotation = gradus;
 
 
        speedX = speedX * friction;
        speedY = speedY * friction;
 
        MyCar_mc.x = MyCar_mc.x + speedX;
        MyCar_mc.y = MyCar_mc.y + speedY;
        //****Условия*******
}
 
//***********************Клавиша нажата******************
stage.addEventListener (KeyboardEvent.KEY_DOWN, key_down);
function key_down (e:KeyboardEvent):void
{
        //****Условия*******
        if (e.keyCode == 38)
        {
                up = true;
        }
 
        if (e.keyCode == 40)
        {
                down = true;
        }
 
        if (e.keyCode == 37)
        {
                left = true;
        }
 
        if (e.keyCode == 39)
        {
                right = true;
        }
        //****Условия*******
}
//***********************Клавиша отпущена****************
//***********************Клавиша нажата******************
stage.addEventListener (KeyboardEvent.KEY_UP, key_up);
function key_up (e:KeyboardEvent):void
{
        //****Условия*******
        if (e.keyCode == 38)
        {
                up = false;
        }
 
        if (e.keyCode == 40)
        {
                down = false;
        }
 
        if (e.keyCode == 37)
        {
                left = false;
        }
 
        if (e.keyCode == 39)
        {
                right = false;
        }
        //****Условия*******
}
//***********************Клавиша отпущена****************

Вот код. работает только влево или вправо. поворачивается тоесть.

Код AS3:

//*****Переменные*****
var speed:Number = 0;
var gradus:Number = 0;
var G:Number = 3;
var radian:Number = (gradus * Math.PI)/180;
var speedX:Number = speed * Math.cos(radian);
var speedY:Number = speed * Math.sin(radian);
 
var a:Number = 0.4;//Ускорение
var friction:Number = 0.97;
 
//*****Переменные*****
 
//***Координаты***
MyCar_mc.x = 100;
MyCar_mc.y = 100;
//****Маркеры*****
var up:Boolean;
var down:Boolean;
var left:Boolean;
var right:Boolean;
//****Маркеры*****
addEventListener (Event.ENTER_FRAME, moveMyCar_mc);
function moveMyCar_mc (e:Event):void
{
 
        if (up)
        {
                speedY = speedY - a;//MyCar_mc.y -= speed;//MyCar_mc.y = MyCar_mc.y - speed; //speedY -= a;
        }
 
        if (down)
        {
                speedY = speedY + a;//MyCar_mc.y += speed;//MyCar_mc.y = MyCar_mc.y + speed;//speedY += a;
        }
 
        if (left)
        {
                gradus = gradus - G;//MyCar_mc.x -= speed;//MyCar_mc.x = MyCar_mc.x - speed;//speedX -= a;
        }
 
        if (right)
        {
                gradus = gradus + G;//MyCar_mc.x += speed;//MyCar_mc.x = MyCar_mc.x + speed;//speedX -= a;
        }
        MyCar_mc.rotation = gradus;
 
 
        speedX = speedX * friction;
        speedY = speedY * friction;
 
        MyCar_mc.x = MyCar_mc.x + speedX;
        MyCar_mc.y = MyCar_mc.y + speedY;
        //****Условия*******
}
 
//***********************Клавиша нажата******************
stage.addEventListener (KeyboardEvent.KEY_DOWN, key_down);
function key_down (e:KeyboardEvent):void
{
        //****Условия*******
        if (e.keyCode == 38)
        {
                up = true;
        }
 
        if (e.keyCode == 40)
        {
                down = true;
        }
 
        if (e.keyCode == 37)
        {
                left = true;
        }
 
        if (e.keyCode == 39)
        {
                right = true;
        }
        //****Условия*******
}
//***********************Клавиша отпущена****************
//***********************Клавиша нажата******************
stage.addEventListener (KeyboardEvent.KEY_UP, key_up);
function key_up (e:KeyboardEvent):void
{
        //****Условия*******
        if (e.keyCode == 38)
        {
                up = false;
        }
 
        if (e.keyCode == 40)
        {
                down = false;
        }
 
        if (e.keyCode == 37)
        {
                left = false;
        }
 
        if (e.keyCode == 39)
        {
                right = false;
        }
        //****Условия*******
}
//***********************Клавиша отпущена****************

А вот код Изменено тока два условия и машинка поворачивается только в прав и влево и движдется вверх или вниз! так как зделать так чтобыона двигалась по направлению движения. я веть уже разложил главный вектор скорости по speedX и SpeedY?????????????????????

alexcon314 27.07.2010 10:17

dkrstudio, оформите код тегами [code][/code]. Или просто уберите лишнее, непонятно ничего.

ChP 27.07.2010 11:04

Может поможет в освоении такая информация. Есть неплохой блог http://xitri.com/. Там есть множество примеров эффектов анимации и использование в анимации actionscript. Там же пример игры-парковки с исходниками и с описанием формул расчета, правда на as2. Думаю поможет в освоении игровой физики

Tr1te 27.07.2010 11:50

dkrstudio, на сколько мне видится, у тебя две проблемы. Это то что ты не знаешь что надо писать, и не знаешь как надо писать.

Давай по порядку. Если пишешь программу то тебе надо в голове понимать ее алгоритм, если ты этого не понимаешь то очень сложно помоч, по этому сначала надо разобраться.

Понимаешь ли ты как должна рассчитываться физика? (По каким законом машина движеться) Поступал ли ты в тех ВУЗ? Просто при поступлении в тех ВУЗ, половина задач именно на динамику.

Еще вопрос, сам ли ты писал тот код который ты сюда вставляешь?

Понимаешь ли ты этот код?

-De- 27.07.2010 12:13

Да вопрос понять невозможно. Соответственно и ответить. Ну а если на человеческом проблемы с языком (ладно там грамматика, хотя я бы стрелял), то что говорить о as3?

hartman 27.07.2010 13:12

Цитата:

Сообщение от dkrstudio (Сообщение 925216)
я веть уже разложил главный вектор скорости по speedX и SpeedY?????????????????????

Короткий ответ - да, более длинный - нет.
Если вы не понимаете что написано у вас в коде, ничего не будет ездить как надо, разве что случайно)
Что по вашему значит "разложить скорость", проекция вектора на направление? x = v*cos(a), y = v*sin(a), где v - скорость, a - ее угол с осью х.

dkrstudio 27.07.2010 13:34

Почему не видно мой аватар. *ну что тут я могу поделать*.
Вобщем код который изначально не мой. я его просто сразу разобрал и быстро понял почему так. потом пошло поехало. Теперь я снова в нем разобрался. Спасибо всем. и не пугайте так новичков. тема движения и физики весьма сложная. Думаю пора хаканчивать этот топик. тему форума. Если кто в дальнейшем будет читать этот топик или как правильно я не знаю. Смортите на синтаксис и на названия переменных. и не пугайтесь! если в продолжение По названию темы будет вопрос про соприкосновения с другими обьетками на сцене то в as3 есть пару методов все на условиях if else. вобщем это основы. Учитесь создовать классы но прежде тестируйте все функции *если можно отнести движение к ним* отдельно и соединяйте готовые СВОИ сто раз разобранные и понятные коды
Всем спасибо.


Часовой пояс GMT +4, время: 11:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.