![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Для начала, скачиваем и "впиливаем" наши swc в проект.
Заходим на AdobeLabs и узнаем наш CirrusCode. Для этого требуется быть зарегистрированным на adobe.com . Создаем проект. Для начала импорт: Теперь объявляем переменные: 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; 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 с комментариями: 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/ -------------------------------------- Последний раз редактировалось MikroAcse; 04.03.2012 в 19:46. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Если в Output будет такое:
Значит все работает на ура. |
|
|||||
|
P2P это все интересно, но есть одна проблема: не у всех конечных пользователей корректно работает UDP.
__________________
ЛОГИКА - залог программирования! |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Это и есть оригинал.
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Что не сделаешь, все вам не нравится!
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|