PDA

Просмотр полной версии : Движение клипа с помощью стрелок клавиатуры


Bustrui
18.03.2007, 00:44
Я буквально 3 дня назад установил Macromedia Flash MX (v7)
Собсно полазил по инэту и наткнулся на кучу флэш игр... вот захотелось научиться делать игры самому...
Убил кучу трафика на поиск всяческих туториалов но практичеки ничего не понял....
Надеюсь мне тут помогут освоить море возможностей ActionScriptа

вопрос №1:)
я создаю новый флэш документ, рисую квадрат, конвертирую его в символ(мовиКлип) и называю его KV
Подскажите как заставить двигаться символ KV про помощи стрелок клавиатуры (ап, давн, лэфт, райт)


Зарание благодарен :)

etc
18.03.2007, 01:06
Автор отправляется придумывать нормальное название своей теме, которое я жду в личку. До тех пор — закрыто.

iNils
18.03.2007, 01:06
var list:Object = new Object ();
list.onKeyDown = function () {
trace (KV);
if (Key.isDown (Key.LEFT)) {
KV._x--;
}
if (Key.isDown (Key.RIGHT)) {
KV._x++;
}
if (Key.isDown (Key.UP)) {
KV._y--;
}
if (Key.isDown (Key.DOWN)) {
KV._y++;
}
};
Key.addListener (list);
Но если вы хотите научится по серьезному, то для начала запомните, что с клипы так не называют. Все буквы в названии прописью используют только для констант.

Bustrui
18.03.2007, 01:41
var list:Object = new Object ();
list.onKeyDown = function () {
trace (KV);
if (Key.isDown (Key.LEFT)) {
KV._x--;
}
if (Key.isDown (Key.RIGHT)) {
KV._x++;
}
if (Key.isDown (Key.UP)) {
KV._y--;
}
if (Key.isDown (Key.DOWN)) {
KV._y++;
}
};
Key.addListener (list);
Но если вы хотите научится по серьезному, то для начала запомните, что с клипы так не называют. Все буквы в названии прописью используют только для констант.
Спс!
я вставил этот код в первый кадр затем тестирую фильм и при нажатие например на стрелку вверх вылазит окошко с текстом
undefined
undefined
а квадрат(KV) как стоял на месте так и стоит....

iNils
18.03.2007, 01:50
А KV это название символа в библиотеке, или это название экземпляра?

Bustrui
18.03.2007, 01:57
А KV это название символа в библиотеке, или это название экземпляра?
это название символа в библиотеке.

Хм... чёто я так и не понял чем символ отличается от экземпляра.... я думал это одно и тоже...
подскажите пожалуйста что такое экземпляр и как ему дать название?...

iNils
18.03.2007, 02:04
Представте, что у вас не один объект, а несколько. И к кому тогда будет относится действие? Поэтому для каждого экземпляра (то что на сцене) дают собственное уникальное имя. Для этого надо открыть панель Properties и вместо <Instance Name> написать KV.

Bustrui
18.03.2007, 02:14
Представте, что у вас не обин объект, а несколько. И к кому тогда будет относится действие? Поэтому для каждого экземпляра (то что на сцене) дают собственное уникальное имя. Для этого надо открыть панель Properties и вместо <Instance Name> написать KV.
Спс за пояснение, дошло )
Вот и второй вопрос:
Квадрат(KV) двигается очень медленно... как изменить его скорость?

iNils
18.03.2007, 02:28
Ну например поменять _x-- на _x-=5, и по аналогии в других местах (_x-- это тоже самое, что и _x-=1)

Bustrui
18.03.2007, 02:44
Ну например поменять _x-- на _x-=5, и по аналогии в других местах (_x-- это тоже самое, что и _x-=1)
спс.
вот еще вопрос:
к примеру вместо квадрата я сделал танк :) как сделать чтоб танк всегда ехал носом вперёд?
вот во вложение мой танк.. видно что он всегда направлен вверх...

iNils
18.03.2007, 02:56
Не понял вопроса.

Bustrui
18.03.2007, 03:12
Не понял вопроса.
как сделать чтоб он поворачивал? допустим жму влево и танк поворачивается дулом в лево
сейчас кудаб я не жал он всегда повёрнут вверх....

Kikasso
18.03.2007, 03:40
работайте с _rotation

iNils
18.03.2007, 03:53
var list:Object = new Object ();
KV.angle = 90;
KV.speed = 5;
KV.angleSpeed = 2;
KV.onEnterFrame = function () {
var x:Number = 0;
var y:Number = 0;
if (Key.isDown (Key.LEFT)) {
KV.angle -= KV.angleSpeed;
}
if (Key.isDown (Key.RIGHT)) {
KV.angle += KV.angleSpeed;
}
KV._rotation = KV.angle - 90;
if (Key.isDown (Key.UP)) {
x = -KV.speed * Math.cos (KV.angle * (Math.PI / 180));
y = -KV.speed * Math.sin (KV.angle * (Math.PI / 180));
}
if (Key.isDown (Key.DOWN)) {
x = KV.speed * Math.cos (KV.angle * (Math.PI / 180));
y = KV.speed * Math.sin (KV.angle * (Math.PI / 180));
}
KV._x += x;
KV._y += y;
};

Bustrui
18.03.2007, 04:21
var list:Object = new Object ();
KV.angle = 90;
KV.speed = 5;
KV.angleSpeed = 2;
KV.onEnterFrame = function () {
var x:Number = 0;
var y:Number = 0;
if (Key.isDown (Key.LEFT)) {
KV.angle -= KV.angleSpeed;
}
if (Key.isDown (Key.RIGHT)) {
KV.angle += KV.angleSpeed;
}
KV._rotation = KV.angle - 90;
if (Key.isDown (Key.UP)) {
x = -KV.speed * Math.cos (KV.angle * (Math.PI / 180));
y = -KV.speed * Math.sin (KV.angle * (Math.PI / 180));
}
if (Key.isDown (Key.DOWN)) {
x = KV.speed * Math.cos (KV.angle * (Math.PI / 180));
y = KV.speed * Math.sin (KV.angle * (Math.PI / 180));
}
KV._x += x;
KV._y += y;
};
ухты :eek: антересно получилось ))
я тут с _rotation эксперементировал...

я смотрю у вас везде стоит ";"... скопировал ваш код и поудалял везде эти знаки и без них всё работало без ошибок, вы его ставите в конце каждой строки... какой смысл?

etc
18.03.2007, 04:24
я смотрю у вас везде стоит ";"... скопировал ваш код и поудалял везде эти знаки и без них всё работало без ошибок, вы его ставите в конце каждой строки... какой смысл?
Смысл в том, чтобы обозначить, что действие закончилось.

iNils
18.03.2007, 04:25
Это не я ставлю, а сам флеш при автоформате. Потому что так правильно.
Если флеш не обращает на это внимание, то например php будет ругаться.

Bustrui
18.03.2007, 04:43
спс, всё ясно.

Эх... получая эти коды особо не научишся...
вот к примеру var list:Object = new Object ()что это такое, непонять...
Немогли бы вы подсказать какойнить сайт с описанием всех этих функций?

etc
18.03.2007, 05:00
По кнопке F1 есть мануал.

iNils
18.03.2007, 05:05
Эх... получая эти коды особо не научишся...Трезвая мысль. Все бы так думали.

Bustrui
18.03.2007, 05:09
По кнопке F1 есть мануал.
Жаль что он не на русском языке :(

iNils
18.03.2007, 05:20
http://www.flasher.ru/forum/showthread.php?t=72459

Bustrui
18.03.2007, 05:43
ну да ладно... попробую продолжить обучение+срздание игры с помошью ваших подсказок :) (конечно если вы не против :) )

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

сейчас меня волнует как сделать препятствия на дороге.
Я создал еще один слой и в нём нарисовал чтото похожее на забор, конвертировал его в символ и назвал pregrada(экземпляр назвал также)
как сделать чтоб мой танк немог проехать сквозь преграду?

на всякий случай вкладываю исходник

Bustrui
18.03.2007, 05:47
http://www.flasher.ru/forum/showthread.php?t=72459



"AS Language Reference на русском"не хочет качаться (

iNils
18.03.2007, 05:58
Я бы вам советал для начала покопаться в сети на тему создание игр, что бы хотя бы иметь представление.
У меня нормально только что скачался.

Bustrui
19.03.2007, 02:46
Я бы вам советал для начала покопаться в сети на тему создание игр, что бы хотя бы иметь представление.
У меня нормально только что скачался.
вчера и сегодня искал... одну ерунду нахожу с готовми кодами....
Немогли бы вы открть тайну откуда берутся эти пораметр: angle, speed, angleSpeed? и где посмотреть их список?
в проге жму ф1 и пиш в поиске к примеру angleSpeed - ненаходит....

iNils
19.03.2007, 04:36
В самом начале кода
...
KV.angle = 90;
KV.speed = 5;
KV.angleSpeed = 2;
...
Я вам советую купить книгу по флешу и почитать, какие именно - заходите в поиск по форуму, в строке поиска наберите книги и выберите поиск по заголовкам.

Bustrui
19.03.2007, 06:52
В самом начале кода
...
KV.angle = 90;
KV.speed = 5;
KV.angleSpeed = 2;
...
Я вам советую купить книгу по флешу и почитать, какие именно - заходите в поиск по форуму, в строке поиска наберите книги и выберите поиск по заголовкам.
спс за совет.
вот решил поискать в гугле(всегда яндексом пользовался) и сразу наткнулся на очень интересный сайт-электронную книгу
аж зачитался, настолько всё ясно и доходчиво расписано что оторваться невозможно :)
теперь хоть както начинаю разбераться :)

кстати сслочку можно тут выложить?
правила не читал - лень :)

iNils
19.03.2007, 06:56
Если книга была предназначена для свободного доступа, то можно. А правила надо прочитать.

Bustrui
19.03.2007, 07:51
Если книга была предназначена для свободного доступа, то можно. А правила надо прочитать.
http://www.intuit.ru/department/internet/flashmxascript/
я бы советовал вам разместить ссылочку гденить в заметном месте для новичков вроде меня :)

iNils
19.03.2007, 07:55
Если бы вы пользовались поиском по форуму, то нашли бы эту ссылку раз 5.

terbooter
19.03.2007, 11:56
Если автору интересно, вот
http://www.dionaholding.ru/news/articles/tbg_flash
неплохие туториалы по созданию tile based игр

J0x
20.07.2007, 17:12
Ребята, а вот вопрос:
как сделать, чтобы при нажатии на клавиши "вверх" или "вниз", нос косм.корабля немного отклонялся от горизонтального положения.
А при отпускании, он обратно возвращался в горизонтальное поолжение.
Мне не надо, чтобы он вокруг своей оси двигался.

starship._rotation=starship._rotation+3;
это естественно не подходит.

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

Вот скрипт корабля:

_root.starshiphead.iID1 = setInterval(movieShip, 40, _root.starship, 10);
//функция 1: движение starship
function movieShip(starship, step) {
if (Key.isDown(Key.RIGHT)) {
starship._x = _root.starship._x+step;
if (Key.isDown(Key.LEFT)) {
starship._x = _root.starship._x-step;
}

if (Key.isDown(Key.DOWN)) {
starship._y = _root.starship._y+step;
//starship._rotation=starship._rotation+3;
}
if (Key.isDown(Key.UP)) {
starship._y = _root.starship._y-step;
//starship._rotation=starship._rotation-3
}
}

J0x
20.07.2007, 17:43
попробовал так, тоже не получается:

//функция 1: движение starship
function movieShip(starship, step) {
if (Key.isDown(Key.DOWN)) {
starship._y = _root.starship._y+step;
starship._rotation=starship._rotation+stepRptation;
}
if (Key.isDown(Key.UP)) {
starship._y = _root.starship._y-step;
starship._rotation=starship._rotation-stepRptation;
}
}

//интервал rotation
createRotataoinInt = setInterval(createRotataoin, 0);
stepRptation = 3;
minRotataoin = -300;
maxRotataoin = 60;
function createRotataoin(minRotataoin, maxRotataoin){
if((starship._rotation=starship.minRotataoin)||(starship._rotation=starship.maxRotataoin)){
stepRptation = 0;
}
}