Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Результаты опроса: Создаете ли вы игры на Flash
Да. Уже Научился 30 78.95%
Нет. 8 21.05%
Голосовавшие: 38. Вы ещё не голосовали в этом опросе

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.07.2010, 13:36
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 11  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

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

Добавлено через 23 минуты
я не боюсь разбиратся. я же сказал что разбил процес на части. Теперь та чась котороя определяет Обнаружение столкновения для сложных фигур в as3 (узнал что это математика, тригонометрия. в идеале) для начало нужно было просто задать скорость вперед назад и зделать чтобы обьект поворачивал при нажатии в лево и вправо. потом определять столкновнеия. Как я убедился
Код AS1/AS2:
if (MyCar.hitTestObject(area_mc))
{
// Какой сюда код нужно прописать?
}
Не подходит потому что вокруг обьектов образуется не видимый прямоугольник так сказать. Теперь дело за математикой. (Силы трения, Скольжения, Тяжести все это просто, о я пока еше новичек в програмировании игр. это для создания сайта или меню испольуя xml все кажется просто, когда же ты не делю мутиш с кодом и получаеш движение, это кажется самое лучшее и о таких силах просто забываеш. Пугают классы и интерфейсы которые предлагают зарубежные разработчики)
вот как определить количество столкновений с 4 линиями обьекта машины. (Да и сама эта идея выглядет не реалестично, а проверять на столкновения со всеми гранями обьекта. муторно) да и потом? Проверять весь путь который пройдет машина (трассу?) а кривые? находить все уравнения? может есть другой вариант?

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

Старый 21.07.2010, 15:41
hartman вне форума Посмотреть профиль Отправить личное сообщение для hartman Найти все сообщения от hartman
  № 12  
Ответить с цитированием
hartman

Регистрация: 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

Старый 21.07.2010, 16:31
ins_nsk вне форума Посмотреть профиль Отправить личное сообщение для ins_nsk Найти все сообщения от ins_nsk
  № 13  
Ответить с цитированием
ins_nsk

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

Старый 21.07.2010, 16:56
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 14  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
Цитата:
Сообщение от dkrstudio Посмотреть сообщение
Вот она беда россии. мы часто смотрим на запад.
На запад смотрим, потому что они далеко вперед ушли.

Старый 22.07.2010, 05:52
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 15  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
Мда. хреновый из меня физик и програмист. буду юзать с самого начала физику.
Вложения
Тип файла: zip Рабочий стол.zip (175.5 Кб, 120 просмотров)


Последний раз редактировалось dkrstudio; 22.07.2010 в 15:28.
Старый 26.07.2010, 05:37
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 16  
Ответить с цитированием
dkrstudio
[+1.3 20.07.10]

Регистрация: Jul 2010
Сообщений: 24
По умолчанию 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. и задняя скорость. Но правда не понимаю. аномальная жара плавит мозг подскажите ПЛЗ

Старый 26.07.2010, 10:41
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 17  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

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

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

Старый 26.07.2010, 12:49
hartman вне форума Посмотреть профиль Отправить личное сообщение для hartman Найти все сообщения от hartman
  № 18  
Ответить с цитированием
hartman

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

Старый 26.07.2010, 16:10
dkrstudio вне форума Посмотреть профиль Отправить личное сообщение для dkrstudio Найти все сообщения от dkrstudio
  № 19  
Ответить с цитированием
dkrstudio
[+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;
	}
 
}
Только объект MyCar создать. Баги есть но работает!
Правда не могу понять. При нажатии лево/право я увеличиваю gradus obj поворачивается на него.
Скорость разложена на

Код:
	speedX=speed*Math.cos(radian);
	speedY=speed*Math.sin(radian);
при нажатии вперед / назад скорость увеличивается на power/ тока не могу теперь понять как уваеличивать скорость в пределах от нуля до (допустим) 3. от 3 до 6, с 6 до 10. и как в любой момент времени реализовать торможение тобись направленное (не знаю как по другому) снижении скорости от n (где n скорость) до 0.???????????????????\



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

Старый 26.07.2010, 20:13
hartman вне форума Посмотреть профиль Отправить личное сообщение для hartman Найти все сообщения от hartman
  № 20  
Ответить с цитированием
hartman

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
hittestobject , объекты на сцене

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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