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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.06.2014, 19:53
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 1  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
The bomb! Пересечение объектов

Подскажите самый простой способ определения пересечения объектов (Sprite). Дело в том, что на сайте
http://codeforgames.ru автор рассматривает большое количество способов пересечения (точка-окружность, окружность-окружность .....). Есть довольно громоздкие коды для определения точного времени пересечения окружностей. Может есть более простой способ определения пересечения Sprite?

Старый 18.06.2014, 20:14
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Какого Sprite? Вы же понимаете, что код пересечения бутылки и парелепипеда будет отличаться от кода пересечения пачки хлопьев и сердечек, похожих на губы?

Старый 18.06.2014, 21:03
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 3  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Dmitriy154, http://help.adobe.com/ru_RU/FlashPla...html#hitTest()

Добавлено через 3 часа 6 минут
> http://codeforgames.ru/kosynka-action-script/
Цитата:
admin 18.04.2014
Посоветовал бы начинать с ActionScript 3. От нуля до ООП Очень всё доступно рассказано, что да как.
Цитата:
admin 19.04.2014
не могу понять причины тормозов флеша :\ Причём, не у одного меня такая проблема. Вот делаешь просто движение объекта на сцене, а появляются рывки. И не важно что двигаешь. Мувики, спрайты, шейпы. Всё равно. Иногда плавно, иногда рывки. То ли от того, что координаты меняются с одним десятичным знаком, то ли ещё что. Частота кадров 60, а рывки есть… И как их убрать ума не дам. as2.0 был прекрасен. Никаких рывков тебе. А тут уж и не знаю что придумать. Ручной рендер впихнуть что ли.. Но это чёрти что получится. Тогда классы надо лепить, а не хочется. Да и сомневаюсь, что будет толк. Во многих играх вижу такие задержки, но много где они не бросаются в глаза, ибо на них и не смотришь, а в дудле движение – это основа всего и поэтому бросается в глаза. Задержки маленькие, но есть. Но не всегда.

Хах, ещё нашёл 1 глюк во флеше… Ну это просто пипец… Он неправильно складывает дробные числа…
если к 5 прибавить 0.2, будет 5.2,
потом к 5.2 прибавить 0.2, получится 5.4,
потом к 5.4 прибавить 0.2, получится 5.6000000000000005
потом 5.800000000000001 и т.д.
что за идиотизм…

А вот as2 складывает всё прекрасно. Что и следовало ожидать. И рывков там нет никаких.

В дудле постоянно складываются дроби, и получаются такие числа, а т.к. координаты могут быть только с 1 десятичным знаком, возможно это и даёт рывки, за счёт округления координат в ту или иную сторону, но не факт. Скорее всего забью на это, и доделаю игру так.
это просто шикос

Старый 19.06.2014, 00:36
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 4  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
Цитата:
Сообщение от nubideus Посмотреть сообщение
Dmitriy154, http://help.adobe.com/ru_RU/FlashPla...html#hitTest()

Добавлено через 3 часа 6 минут
> http://codeforgames.ru/kosynka-action-script/ это просто шикос
то что надо!

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
То, что надо? Oo Это был сарказм?
Этот код просто ужасен.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 19.06.2014, 11:06
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
var koloda:Array = [];
var koloda0:Array = [];
var koloda1:Array = [];
 
var kolodaA1:Array = [];
var kolodaA2:Array = [];
var kolodaA3:Array = [];
var kolodaA4:Array = [];
 
var kolodaK1:Array = [];
var kolodaK2:Array = [];
var kolodaK3:Array = [];
var kolodaK4:Array = [];
var kolodaK5:Array = [];
var kolodaK6:Array = [];
var kolodaK7:Array = [];
 
//добавление бубновых карт
for (var b:uint=1; b<=13; b++) {
    karta1 = "b"+b;
    game[karta1] = new b_mc;
    pole.addChild(game[karta1]);
    game[karta1].gotoAndStop(b);
    game[karta1].x = b*50;
    game[karta1].y = 72;
    game[karta1].active = false;
    game[karta1].koloda = "koloda0";
    game[karta1].cifra = b;
    game[karta1].name = b;
    game[karta1].mast = "b";
    game[karta1].color = "red";
    game[karta1].width = 70;
    game[karta1].height = 96;
    game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md);
    game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu);
    game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over);
    game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out);
}
 
//добавление червовых карт
for (var c:uint=1; c<=13; c++) {
    karta1 = "c"+c;
    game[karta1] = new c_mc;
    pole.addChild(game[karta1]);
    game[karta1].gotoAndStop(c);
    game[karta1].x = c*50;
    game[karta1].y = 172;
    game[karta1].active = false;
    game[karta1].koloda = "koloda0";
    game[karta1].cifra = c;
    game[karta1].name = c + 13;
    game[karta1].mast = "c";
    game[karta1].color = "red";
    game[karta1].width = 70;
    game[karta1].height = 96;
    game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md);
    game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu);
    game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over);
    game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out);
}
 
//добавление крестовых карт
for (var k:uint=1; k<=13; k++) {
    karta1 = "k"+k;
    game[karta1] = new k_mc;
    pole.addChild(game[karta1]);
    game[karta1].gotoAndStop(k);
    game[karta1].x = k*50;
    game[karta1].y = 272;
    game[karta1].active = false;
    game[karta1].koloda = "koloda0";
    game[karta1].cifra = k;
    game[karta1].name = k + 26;
    game[karta1].mast = "k";
    game[karta1].color = "black";
    game[karta1].width = 70;
    game[karta1].height = 96;
    game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md);
    game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu);
    game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over);
    game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out);
}
 
//добавление пиковых карт
for (var p:uint=1; p<=13; p++) {
    karta1 = "p"+p;
    game[karta1] = new p_mc;
    pole.addChild(game[karta1]);
    game[karta1].gotoAndStop(p);
    game[karta1].x = p*50;
    game[karta1].y = 372;
    game[karta1].active = false;
    game[karta1].koloda = "koloda0";
    game[karta1].cifra = p;
    game[karta1].name = p + 39;
    game[karta1].mast = "p";
    game[karta1].color = "black";
    game[karta1].width = 70;
    game[karta1].height = 96;
    game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md);
    game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu);
    game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over);
    game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out);
}
А это вообще на г-код надо )
__________________
тут я

Старый 19.06.2014, 12:42
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 7  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Но в итоге у него что-то даже симпатичное получилось.
Наверное, недавно переквалифицировавшийся дизайнер или аниматор.
Или давно привык делать простенькие игры.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 19.06.2014, 19:23
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 8  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
caseyryan,
Цитата:
То, что надо? Oo Это был сарказм?
Этот код просто ужасен.
этот код не просто ужасен, там даже нет решения проблемы топика.
ТСу понравилось BitmapData.hitTest

КорДум, глянь на 312 строку, там функция в 600 строк

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

Регистрация: Feb 2014
Сообщений: 192
так точно, мне понравилось BitmapData.hitTest. НО еще не разобрался, но истина где-то там

Старый 19.06.2014, 23:59
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 10  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Dmitriy154,
Код AS3:
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.display.Bitmap;
import flash.geom.ColorTransform;
import flash.display.IBitmapDrawable;
import flash.display.DisplayObjectContainer;
 
var s1:Sprite = new Sprite();
var s2:Sprite = new Sprite();
this.addChild(s1);
this.addChild(s2);
s1.graphics.beginFill(0xFF0000);
s1.graphics.drawRect(0, 0, 100, 200);
s1.rotation = 60;
s1.transform.concatenatedMatrix
 
s2.graphics.beginFill(0xFF0000);
s2.graphics.drawCircle(50, 50, 50);
s2.scaleX = .5;
s2.x = 150;
s2.y = 150;
 
s1.startDrag(true);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
function onEnterFrame(event:Event):void{
	s1.transform.colorTransform = new ColorTransform();
	if(test(s1, s2)){
		s1.transform.colorTransform = new ColorTransform(
			1, 1, 0, 1,
			0xFF,
			0,
			0xFF
		);
	}
}
 
function test(s1:DisplayObject, s2:DisplayObject):Boolean{
	if(!(s1.transform.matrix && s2.transform.matrix && s1.parent === s2.parent)){
		return false;
	}
	var rect1:Rectangle = s1.getBounds(this);
	var rect2:Rectangle = s2.getBounds(this);
	if(rect1.intersects(rect2)){
		var bm1:BitmapData = new BitmapData(
			rect1.width, rect1.height, true, 0x00000000
		);
		var bm2:BitmapData = new BitmapData(
			rect2.width, rect2.height, true, 0x00000000
		);
 
		var m:Matrix = null;
 
		m = s1.transform.matrix.clone();
		m.translate(-rect1.x, -rect1.y);
		bm1.draw(s1, m);
 
		m = s2.transform.matrix.clone();
		m.translate(-rect2.x, -rect2.y);
		bm2.draw(s2, m);
 
		var maxAlpha:uint = 0x01; // чувствительность к прозрачности
		return bm1.hitTest(
			rect1.topLeft, maxAlpha, bm2, rect2.topLeft, maxAlpha
		);
	}
	return false;
}

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

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

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


 


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


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