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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.10.2013, 20:04
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 21  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Как раз сейчас балуюсь с JS + Box2D, тема для эксперимента вполне подойдет.
__________________
adobe AS3 manual

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от strangedk Посмотреть сообщение
Как раз сейчас балуюсь с JS + Box2D, тема для эксперимента вполне подойдет.
Поделитесь результатами)
__________________
return this...

Старый 04.10.2013, 21:31
ndiezel вне форума Посмотреть профиль Отправить личное сообщение для ndiezel Посетить домашнюю страницу ndiezel Найти все сообщения от ndiezel
  № 23  
Ответить с цитированием
ndiezel
 
Аватар для ndiezel

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
В общем-то мысль про box2D у меня была... Когда я взялся за функцию появления новых блоков.
Нахождение схожих и общая, стартовая, расстановка блоков, падание блоков после убирания схожих - уже было сделано. Загвоздка стала именно с появлением новых. Потому что они сдвигали все блоки на одну ячейку влево. И нужно было ещё учитывать пустые ячейки, которые могли быть между основной "кучей" блоков и каким-нибудь остатком.

В общем - после попыток всё это собрать, я посмотрел в сторону box2D. Но, как писал выше - после двух часов бесплотных попыток заставить его работать - плюнул и таки собрал нужную функцию.
Которая сейчас благополучно прошла тестирование и работает

К слову, кто хочет попробовать написать движок, я делаю аналог вот этой игры - http://www.deadwhale.com/play.php?game=2124 Чтоб я не расписывал все правила, так проще показать.

Старый 04.10.2013, 21:52
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 24  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Вы че, прикалываетесь все?
Тут поле ограниченных размеров - массив двумерный. Значение от ноля (пусто) до кол-ва цветов на поле. Плюс какой-то уникальный для взрывчатки.

По клику:
1. Отловить всех соседей, если >= 2 - взорвать. (если взрывчатка то весь ряд)
2. Далее сдвигаем сверху вниз. Можно если не заморачиваться - пройтись по всему полю, начиная от самых верхних рядов, и если под ячейкой есть дырка - уронить ее. Если заморачиваясь, то волнами вокруг образовавшейся дырки.
3. Раз в несколько кликов - сдвинуть всю конструкцию влево. Опять же начиная от дальшнего ряда.

Это работа модели и массива-карты поля.
А вью по этим даным отрисовать вообще не проблема.
__________________
Кто к нам с чем для чего - тот у нас того от того.


Последний раз редактировалось Dukobpa3; 04.10.2013 в 23:26.
Старый 04.10.2013, 22:50
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 25  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
В классических линиях никто никуда не падает
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 04.10.2013, 23:11
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 26  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Классические линии реализовать сложнее в плане анимаций.
Там еще и поиск пути прикручивать надо. А тут вообще нифига нету. Взял и сделал.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 05.10.2013, 00:01
RedLizard вне форума Посмотреть профиль Отправить личное сообщение для RedLizard Найти все сообщения от RedLizard
  № 27  
Ответить с цитированием
RedLizard
 
Аватар для RedLizard

Регистрация: Feb 2008
Сообщений: 21
Обычная задача на логику. Че тут делать то. Все сводится к поиску в массиве по определенному правилу, удалению элементов и последующей сортировке. Просто надо взять личт бумагии на нем для себя зарисовывать варианты и в голове прогонять алгоритм.

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Да, я посмотрел какую именно вы игру делаете, думаю с Боксом Вы намучаетесь, я подумал за игру где кубы меняются местами. Первая сложность какая будет у Вас, это двигать их всех. А создавать виртуальный мир на каждый столбец не логично.
Лучше всего Вам работать с массивами.
Примерно я думаю так
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public class Test extends Sprite {
 
		private var count:uint = 8;
		private var colors:Vector.<uint> = new Vector.<uint>();
		private var game:Vector.<Vector.<Sprite>> = new Vector.<Vector.<Sprite>>;
 
		public function Test() {
 
			addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler );
 
			colors.push( 0xFF0000 );
			colors.push( 0x00FF00 );
			colors.push( 0x0000FF );
 
			addBlock();
			addBlock();
			addBlock();
			addBlock();
			addBlock();
			addBlock();
			addBlock();
			addBlock();
 
			visualizator();
		}
 
		private var targetColor:String;
 
		private var countT:Number = 0;
 
		private var stepAdd:Number = 3;
		private var step:Number = 0;
 
		private function mouseHandler(e:MouseEvent):void {
 
			var info:Array = informer(e.target.name);
			var coord:Array = info[1].split('.');
 
			targetColor = info[0];
 
			countT = 0;
 
			scanner( coord[0] , coord[1] );
 
			rebuild(countT>2);
 
			if (++step==stepAdd) addBlock();
		}
 
		private function rebuild(status:Boolean):void {
 
			var newGame:Vector.<Vector.<Sprite>> = new Vector.<Vector.<Sprite>>;
 
			for ( var cid:uint = 0 ; cid < game.length; cid++) {
 
				newGame.push( new Vector.<Sprite> );
 
				for ( var bid:uint = 0 ; bid <  game[ cid ].length ; bid++ ) {
 
					if (status) {
 
						if (game[ cid ] [ bid ].visible) {
 
								game[ cid ] [ bid ].visible = true;
 
								newGame[ cid ].push( game[ cid ] [ bid ] );
						}
 
					} else {
 
						game[ cid ] [ bid ].visible = true;
 
						newGame[ cid ].push( game[ cid ] [ bid ] );
					}
				}
			}
 
			game = newGame;
 
			visualizator();
		}
 
		private function scanner( ix:uint , iy:uint ):void {
 
			rescanner( ix, iy );
 
			try {
 
				if ( iy < game[ ix ].length - 1 ) 
					for ( var sy:Number = iy+1; sy < game[ ix ].length ; sy++) {
 
						if ( game[ ix ] [ sy ].visible &&  informer( game[ ix ] [ sy ].name )[0] == targetColor ) {
 
							rescanner( ix, sy );
 
						} else break;
					}
 
				if (iy)
					for ( sy = iy-1; sy >= 0 ; sy--) {
 
						if ( game[ ix ] [ sy ].visible && informer( game[ ix ] [ sy ].name )[0] == targetColor ) {
 
							rescanner( ix, sy );
 
						} else break;
					}		
			} catch (e:Error) { trace('omg') };
 
		}
 
		private var scanVector:Number = 0;
 
		private function rescanner( ix:Number, iy:Number):void {
 
			try {
				if ( game[ ix ] [ iy ].visible && informer( game[ ix ] [ iy ].name )[0] == targetColor ) {
 
					game[ ix ] [ iy ].visible = false;
 
					countT++;
				}
			} catch (e:Error) { trace('omg');}
 
			var nx:Number;
 
			nx = ix+1;
 
			if ( nx < game.length && iy < game[ nx ].length ) {
 
				if ( game[ nx ] [ iy ].visible && informer( game[ nx ] [ iy ].name )[0] == targetColor) {
 
					game[ nx ] [ iy ].visible = false;
 
					countT++;
 
					scanner( nx,iy );
				}
			}
 
			nx = ix-1;
 
			if ( nx >= 0 && iy < game[ nx ].length) {
 
				if ( game[ nx ] [ iy ].visible && informer( game[ nx ] [ iy ].name )[0] == targetColor) {
 
					game[ nx ] [ iy ].visible = false;
 
					countT++;
 
					scanner( nx,iy );
				}
			}
 
		}
 
		private function blockBuilder(color:uint):Sprite {
 
			var block:Sprite = new Sprite();
				block.name = color.toString()+'x';
				block.graphics.beginFill( color );
				block.graphics.drawRect(0,0, 20, 20);
				block.graphics.endFill();
 
			return block;
 
		}
 
		private function informer(sname:String):Array {
			return sname.split('x');
		}
 
		private function visualizator():void {
 
			while ( numChildren ) removeChildAt(0);
 
			var block:Sprite;
 
			for ( var cid:uint = 0 ; cid < game.length; cid++) {
 
				for ( var bid:uint = 0 ; bid <  game[ cid ].length ; bid++ ) {
 
					block = game[ cid ][ bid ];
 
					block.name = informer(block.name)[0]+'x'+cid+'.'+bid;
 
					block.x = stage.stageWidth - cid * 25;
					block.y = stage.stageHeight -bid * 25;
 
					addChild( block );
 
				}
			}
		}
 
		private function addBlock():void {
 
			step = 0;
 
			var colums:Vector.<Sprite> = new Vector.<Sprite>;
 
			for (var i:uint = 1; i <= count; i++ ) {
				colums.push( blockBuilder( colors[ Math.floor( Math.random() * colors.length ) ]  ) );
			}
 
			var newGame:Vector.<Vector.<Sprite>> = new Vector.<Vector.<Sprite>>;
				newGame.push( colums );
 
			var joins:Boolean = true;
 
			for ( i=0; i<game.length; i++) {
 
				if (!game[i].length && joins) {
					joins = false;
					continue;
				}
 
				newGame.push( game[i] );	
 
			}
 
			game = newGame;
 
 
		}
	}
 
}
Добавлено через 4 минуты
конечно, нужно пихать экземпляры боксов в массив и не придумывать велосипеды с sprite.name но мне просто было лень создавать отдельный класс, хотя и можно было б в internal.

Добавлено через 4 минуты
да и там с проверкой чуток наворотил, можно обойтись одной рекурсией.

Добавлено через 6 минут
oops... бажит) Ну извините)
__________________
return this...

Старый 05.10.2013, 01:42
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 29  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
AlexCooper игра у Вас вообще не работает, она живет своей жизнью)

Старый 05.10.2013, 13:32
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 30  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Akopalipsis у меня работает, бажит правда)) Но можно взять за основу подкорректировав. Небыло времени дотачивать.
__________________
return this...

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

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

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


 


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


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