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

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

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

Регистрация: Feb 2012
Сообщений: 1,540
По умолчанию Создание P2P игры с помощью библиотеки Tom Krcha.

Для начала, скачиваем и "впиливаем" наши swc в проект.

Заходим на AdobeLabs и узнаем наш CirrusCode. Для этого требуется быть зарегистрированным на adobe.com .

Создаем проект.
Для начала импорт:
Код AS3:
import com.adobe.fms.*;
import com.adobe.fms.events.*;
Теперь объявляем переменные:
Код AS3:
private const developer_key:String="ВАШ_CIRRUS_CODE";
private var users:Object;
private var usr:String="id"+Math.round(Math.random()*10000); // это ID, лучше делать его более неповторимым, например, с помощью User.UIC в моей библиотеке, который выдает практически неповторимый ID 
public var game:P2PGame;
public var txtLog:TextField;
public var myUser:Sprite;
Теперь, ваш главный класс должен выглядеть примерно так:
Код AS3:
package {
	import com.adobe.fms.*;
	import com.adobe.fms.events.*;
	import flash.display.MovieClip;
	import flash.events.Event;
 
	public class Main extends MovieClip {
 
		private const developer_key:String="ВАШ_CIRRUS_CODE";
 
		private var users:Object;
		private var usr:String="id"+Math.round(Math.random()*10000);// это ID, лучше делать его более неповторимым, например, с помощью User.UIC в моей библиотеке, который выдает практически неповторимый ID 
 
		public var game:P2PGame;
		public var txtLog:TextField;
		public var myUser:Sprite;
 
		public function Main():void {
			if (stage)
				init(null);
			else 
				addEventListener(Event.ADDED_TO_STAGE,init);
		}
 
		public function init(e:Event):void {
 
		}
 
	}
 
}
Ставим в настройках вашего компилятора: "доступ только к сети".

Окончательный Main.as с комментариями:
Код AS3:
package {
	import com.adobe.fms.*;
	import com.adobe.fms.events.*;
 
	import flash.display.MovieClip;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
 
	public class Main extends MovieClip {
 
		private const developer_key:String="ВАШ_CIRRUS_CODE";
 
		private var users:Object;
		private var usr:String="id"+Math.round(Math.random()*10000);// это ID, лучше делать его более неповторимым, например, с помощью User.UIC в моей библиотеке, который выдает практически неповторимый ID 
 
		public var game:P2PGame;
		public var txtLog:TextField;
		public var myUser:Sprite;
 
		public function Main():void {
			if (stage)
				init(null);
			else 
				addEventListener(Event.ADDED_TO_STAGE,init);
		}
 
		public function init(e:Event):void {
			startP2PServer(); //стартуем
		}
 
		public function startP2PServer():void {
			initLog(); //создаем лог событий и функций
			initGame(); //запускаем p2p сервер
			Logger.log("init"); //собственно, добавляем в лог функцию
		}
		/*
		INIT
		*/
		public function initGame():void {
			myUser=new Sprite(); // рисуем свой квадрат.
 
			myUser.graphics.beginFill(0xFF0000); // рисуем квадрат и все такое
			myUser.graphics.drawRect(0,0,15,10);
			myUser.graphics.endFill();
 
			myUser.x=mouseX;  //задаем координаты
			myUser.y=mouseY; 
 
			addChild(myUser)
 
			myUser.startDrag(); // начинаем двигать наш квадрат за мышкой
 
			// CONNECT
 
			game=new P2PGame("rtmfp://p2p.rtmfp.net/"+developer_key); // создаем новый экземпляр игры с сервером и cirrus code
			game.addEventListener(Event.CONNECT, onGameConnect);  // добавляем событие: "подключение к игре"
			game.addEventListener(Event.CHANGE, onUsersChange); // добавляем событие: "изменения в списке пользователей"
 
			Logger.log(usr); // добавляем в лог функцию
			game.connect(usr); //коннектимся
		}
		public function initLog():void {
			if (Logger.txtArea==null) {
				txtLog = new TextField();  // создание лога
				Logger.txtArea=txtLog;
			}
		}
		/*
		CONNECT
		*/
		private function onGameConnect(event:Event):void {
			Logger.log("onGameConnect"); // добавляем в лог: "УРА, МЫ ПОДКЛЮЧИЛИСЬ!"
 
			game.session.mainChat.addEventListener(PeerStatusEvent.USER_ADDED, onUserAdded); // добавляем событие: "кто-то зашел"
			game.session.mainChat.addEventListener(PeerStatusEvent.USER_REMOVED, onUserRemoved);  // добавляем событие: "кто-то вышел"
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoving); // добавляем событие движения мыши
 
			users = new Object(); // это список пользователей
 
			game.setReceivePositionCallback(onReceivePosition); // функция: "onReceivePosition" вызывается, когда кто-то передает данные
		}
		/*
		USERS
		*/
		public function onUsersChange(event:Event):void {
			for each (var user:Object in game.session.mainChat.userList) { 
				addUser(user);  //каждому человеку в списке пользователей создаем квадрат
			}
		}
 
		public function onUserAdded(event:PeerStatusEvent):void {
			addUser(event.info); // если кто-то заходит, ему добавляется квадрат.
		}
 
		public function addUser(user:Object):void {
			if (user.id!=game.session.myUser.id) { //проверяет, не являемся ли человеком в списке - мы
				if (users[user.id]==null) { // проверяем, что квадрат для человека еще не создан
					var userObject:Sprite = new Sprite(); // создаем человеку спрайт
 
					addChild(userObject); 
 
					userObject.graphics.beginFill(0xFF0000); // рисуем квадрат и все такое
					userObject.graphics.drawRect(0,0,15,10);
					userObject.graphics.endFill();
 
					users[user.id]=userObject; //добавляем в список людей этот квадрат
 
					userObject.name='man_id_'+user.id; // задаем уникальное имя.
				}
			}
		}
 
		public function onUserRemoved(event:PeerStatusEvent):void {
				removeChild(users[event.info.id] as DisplayObject); // удаляем квадрат человека, который выходит.
				delete users[event.info.id]; //удаляем человека из списка
		} 
 
		//----------------------------------------------------------------------------------------------------------- EVENTS 
 
		public function mouseMoving(e:MouseEvent):void { //отправка данных
			var objectToSend:Object=new Object(); //объект с информацией
 
			objectToSend.x=myUser.x; //записываем x и y (можно записать ВСЕ, что угодно)
			objectToSend.y=myUser.y;
 
			game.sendPosition(objectToSend);// отправляем данные...
		}
 
		public function onReceivePosition(peerID:String, pos:Object):void { //прием данных
			var recieveUser:Sprite=users[peerID]; //находим человека в списке пользователей
 
			if(recieveUser){ // если он нашелся, то делаем с информацией все, что угодно
				recieveUser.x=pos.x;
				recieveUser.y=pos.y;
			}
		}
 
 
	}
 
}
Исходник с примером:
http://www.flasher.ru/forum/attachme...1&d=1330872311
Пример запускайте в двух окнах и смотрите

PS: на одном компьютере может виснуть два приложения, которые работают через P2P.

Сайт Tom'а Krcha:
http://www.flashrealtime.com/p2p-game-lib/

--------------------------------------
Вложения
Тип файла: rar P2PLib.rar (30.8 Кб, 165 просмотров)
Тип файла: rar P2PTests.rar (16.1 Кб, 174 просмотров)


Последний раз редактировалось MikroAcse; 04.03.2012 в 19:46.
Старый 04.03.2012, 01:41
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 2  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Если в Output будет такое:
Код AS3:
NetConnection.Connect.Success
NetGroup.Connect.Success
Значит все работает на ура.

Старый 04.03.2012, 02:45
ZGG вне форума Посмотреть профиль Отправить личное сообщение для ZGG Найти все сообщения от ZGG
  № 3  
Ответить с цитированием
ZGG
 
Аватар для ZGG

Регистрация: Nov 2005
Адрес: 26°58′49.06″ 49°24′35.72″ Ymaps
Сообщений: 119
Отправить сообщение для ZGG с помощью ICQ Отправить сообщение для ZGG с помощью Skype™
P2P это все интересно, но есть одна проблема: не у всех конечных пользователей корректно работает UDP.
__________________
ЛОГИКА - залог программирования!

Старый 04.03.2012, 02:50
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 4  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
не у всех конечных пользователей корректно работает UDP.
Почему? Где ты это узнал?

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Это совсем не флейм.

Цитата:
PS: на одном компьютере может виснуть два приложения, которые работают через P2P.
В смысле это такая фича?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
MikroAcse, хорошим тоном считается указывать ссылки на оригинал библиотеки. Тем более, что доступны исходники и библиотека развивается.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2012
Сообщений: 1,540
Это и есть оригинал.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
И что? Вы предполагаете выкладывать все обновления библиотеки в этом посте, включая документацию и исходники?
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2012
Сообщений: 1,540
Что не сделаешь, все вам не нравится!

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
При чем тут нравится/не нравится? Это был вам совет на будущее.
Под оригиналом я подразумевал оригинальный источник.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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