Просмотр полной версии : Простой вопрос про логику игрушки.
swfSlavik
16.03.2007, 20:00
Кто как реализовывал пушку которая стреляет в разные стороны, тоесть положение внизу экрана и она недвижима, но поворачивает дуло (180)? Типа чтобы снаряды летали красиво. Просто идеи.
swfSlavik
16.03.2007, 22:33
Красиво это как?
з точки зрения реализации.
Обычно люди сначала предлагают свою реализацию, а потом спрашивают как ее сделать более красивой. А вы сразу хотите, что бы и сделали и красиво?:)
Сперва бабахает, потом пуляет.. И чтоб звук погуще.. И дуло чтоп со скрипом поворачивалось.. А при взрыве окно броузера смещать джаваскриптом. А если в тебя попали - синий экран и "нажмите любую клавишу"
relevance4
17.03.2007, 19:57
Сперва бабахает, потом пуляет.. И чтоб звук погуще.. И дуло чтоп со скрипом поворачивалось.. А при взрыве окно броузера смещать джаваскриптом. А если в тебя попали - синий экран и "нажмите любую клавишу"
а чё! круто, я бы поиграл.
Типа чтобы снаряды летали красиво. Просто идеи.
а какие могут быть идеи? математика и физика. мне лично только эт этих слов уже красиво стало
swfSlavik
17.03.2007, 21:13
Kikasso - очень хороший советчик, нада обязательно прислушаца.
Но может кто-то болле конструктивно подойдет к вопросу. Я вот поворачиваю дуло при помощи _rotation, a вот как привязать пулю к концу дула?? я и через синусы и через косинусы, кое как выходит но до идеала далеко.
Автор, мы гадать будем как там что делаете или вы все же нам это покажите?
swfSlavik
17.03.2007, 21:58
Мне была фстыдна но так и быть.
gun.cannon._rotation = angle; //Собственно поворот дула
angleRadians = (angle/360)*2*Math.PI
....
//Определение нового места положения пули(ball) (ну очень фстыдна)
(angleRadians <= 0)?tmpY = (gun._y-5) + -1*Math.sin(angleRadians)*60:tmpY = (gun._y-5) + Math.sin(angleRadians)*50;
tmpX = (gun._x + gun._width/2-10) + Math.sin(angleRadians)*120;
//Ромещение пули
tmpBall._x = tmpX;
tmpBall._y = tmpY;
1. Вы специально пишите " фстыдна"? Правилами это запрещено http://www.flasher.ru/forum/rules.php пункт 1
2. Зачем такая сложная конструкция?
angleRadians = (angle/360)*2*Math.PI
Достаточно
angleRadians = angle * (Math.PI / 180);
3. Собственно сам код, писал в слепую, так как по коду невозможно узнать свойство и организацию ваших мувиклипов
angle = 180;
//// длина ствола пушки
lengthGun = 120;
//// разница между фактическим углом пушки и углом поворота мувиклипа
//// то есть, если пушка смотрит вверх, а мувиклип повернут на 0 градусов, то угол будет -90
angleInit = -90;
gun.cannon._rotation = angle;
//Собственно поворот дула
angleRadians = (angleInit + angle) * (Math.PI / 180);
var point:Object = {x:gun.cannon._x, y:gun.cannon._y};
gun.cannon.localToGlobal (point);
//Ромещение пули
tmpBall._x = point.x + lengthGun * Math.cos (angleRadians);
tmpBall._y = point.y + lengthGun * Math.sin (angleRadians);
swfSlavik
18.03.2007, 02:22
спс, буду дерзать.
Вот такой вариант еще, если учитывать гравитацию:
Ствол пушки - гипотенуза, вычисляешь проэкции на оси координат, dx и dy, делишь эти dx и dy на время нахождение снаряда в стволе (определяется подбором), получаешь вертикальную и горизонтальную скорость vx и vy, а потом по формуле, в каждом кадре:
x1 = x0 + vx;
y1 = y0 + vy;
vy = vy + g;
g - это ускорение свободного падения, тоже подбором. Только ось Y во флеше смотрит вниз, так что vy сначала будет отрицательной. Реально учебник физики для 6-го класса, тригонометрия для 7-го.
Только это не логика игрушки, а уравнения движения.
swfSlavik
19.03.2007, 13:30
Согласен что учебник физики, только вот непонятно почему выходит не все как хочется, возможно причина недостаточно практики.
Самое время попрактиковаться. Не забыть про оси координат.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.