![]() |
|
||||||||||
|
|||||||
| Результаты опроса: Создаете ли вы игры на Flash | |||
| Да. Уже Научился |
|
30 | 78.95% |
| Нет. |
|
8 | 21.05% |
| Голосовавшие: 38. Вы ещё не голосовали в этом опросе | |||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1.3 20.07.10]
Регистрация: Jul 2010
Сообщений: 24
|
Вот она беда россии. мы часто смотрим на запад. Терпеть не могу переведенные уроки. и туториалы
![]() Все таки я надеялся что Adobe будет учить русский и это свершилось. хотя у нас таких программ не было и небудет. именно из за тутореалов. (гадость) Пока что я понял что в as3 рулит addEventListener (который слушает события и затем идет функция) затем идет физика. и вроде все понятно. Второй день юзаю 1-6 главы Книги где игры пишут на as2 там совершенно другой подход. конвертер выдает не понятный класс, так что это бессмысленно. но сохраняется тоже после наступления действия чтото происходит. Добавлено через 23 минуты я не боюсь разбиратся. я же сказал что разбил процес на части. Теперь та чась котороя определяет Обнаружение столкновения для сложных фигур в as3 (узнал что это математика, тригонометрия. в идеале) для начало нужно было просто задать скорость вперед назад и зделать чтобы обьект поворачивал при нажатии в лево и вправо. потом определять столкновнеия. Как я убедился Не подходит потому что вокруг обьектов образуется не видимый прямоугольник так сказать. Теперь дело за математикой. (Силы трения, Скольжения, Тяжести все это просто, о я пока еше новичек в програмировании игр. это для создания сайта или меню испольуя xml все кажется просто, когда же ты не делю мутиш с кодом и получаеш движение, это кажется самое лучшее и о таких силах просто забываеш. Пугают классы и интерфейсы которые предлагают зарубежные разработчики) вот как определить количество столкновений с 4 линиями обьекта машины. (Да и сама эта идея выглядет не реалестично, а проверять на столкновения со всеми гранями обьекта. муторно) да и потом? Проверять весь путь который пройдет машина (трассу?) а кривые? находить все уравнения? может есть другой вариант? Добавлено через 24 минуты Вот это уже AS3/ но тоже разработка запада |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 110
|
Напишите конкретно что надо сделать, без лирических отступлений о том как все сложно. Что уже есть, что не получается? По моим догадкам вы хотите смоделировать двумерное движение + столкновения.
hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean может проверять пересечение объекта с точкой. То что вы называете невидимый прямоугольник это габаритный контейнер объекта, можно проверять пересечение не с ним, а с сами объектом, для этого shapeFlag задаем равным true. Потом рисуете, например, ограждение трассы сложной формы, а на машине устанавливаете несколько точек для проверки пересечения hitTestPoint. вот тут так сделано, только это AS2 (метод hitTest()): http://tester.kiti-art.ru/flash/fish5.html |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 30
|
Цитата:
Цитата:
![]() |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
На запад смотрим, потому что они далеко вперед ушли.
|
|
|||||
|
[+1.3 20.07.10]
Регистрация: Jul 2010
Сообщений: 24
|
Мда. хреновый из меня физик и програмист. буду юзать с самого начала физику.
Последний раз редактировалось dkrstudio; 22.07.2010 в 15:28. |
|
|||||
|
[+1.3 20.07.10]
Регистрация: Jul 2010
Сообщений: 24
|
Извените за лирику. но мне перегрели мозг. спасибо трайтону и всем кто помог советом сделать наподобие макета неделю назад. сейчас же я вообще ни чего не могу понять. не говоря о столкновениях.
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++;
}
}
Цитата:
Угол поворота понятно как задавать. но я теперь не могу разобратся как сохранять поворот при движении. После свойства rotation и ничего нет на сцене. в условии Up и Down Увеличивать на a // Ускорение и до условий умножать на f//Трение ни чего на тесте флешки не выводится (тобись нет ничего). Правда надоела мне игра. но я не здамся. даже учебник алгебры нашел за 7 класс и кроме как того что ускорять нужно правдоподобное ускорение машины с ступенчатой передачей. соответсвенно клавиши 1. 2. 3. 4. 5. и задняя скорость. Но правда не понимаю. аномальная жара плавит мозг подскажите ПЛЗ |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Я тут както вопроса не увидел. И поясни, пожалуйста, что ты имеешь ввиду под: "но я теперь не могу разобратся как сохранять поворот при движении."
Что ты под этим подразумеваешь. |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 110
|
dkrstudio, этот код и не должен ничего выводить, там просто меняются переменные.
Поворот машины штука относительно сложная по сравнению с учебником алгебры за 7 класс. Вам нужна "механика", раздел называется "динамика". Там показывается, что любое движение тела можно разложить на поступательное движение центра масс и вращение вкруг оси, проходящей через центр масс... |
|
|||||
|
[+1.3 20.07.10]
Регистрация: Jul 2010
Сообщений: 24
|
Вот код который я писал в начале. все вроде работает. кроме кучи багов. хоть щас на сцену
// Типа 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;
}
}
Правда не могу понять. При нажатии лево/право я увеличиваю gradus obj поворачивается на него. Скорость разложена на при нажатии вперед / назад скорость увеличивается на power/ тока не могу теперь понять как уваеличивать скорость в пределах от нуля до (допустим) 3. от 3 до 6, с 6 до 10. и как в любой момент времени реализовать торможение тобись направленное (не знаю как по другому) снижении скорости от n (где n скорость) до 0.???????????????????\ И второй вопрос. не мучайте меня подскажите. может сразу в классы пакеты или как там (я еще не разобрался в них) ведь создаю игру и в ней будут машины. хотя бы те которыми будет управлять один игрок. так как это все дело запихнуть в классы и загружать на сцену в определенные координаты?
__________________
Ну что с этим делать |
|
|||||
|
Регистрация: Jul 2010
Сообщений: 110
|
Со второго вопроса нужно было начинать. Почитать документацию и сделать хоть пару примеров, там все вполне доступно и есть исходники.
А по поводу первого, вы понимаете что происходит в этой строке: speed+=power&&speed<maxSpeed;? Тут наверное нужен условный оператор. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:01. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| hittestobject , объекты на сцене |
|
|