|
|
|||||
Регистрация: Nov 2015
Сообщений: 46
|
передача в socket
Вообщем не знаю что делать. Надо передать информацию в сокет. Все хорошо передается но есть одно но!
Делаю рисовалку через сокет, она 90% отправленных данных теряет... Заметил я это когда в чате пытался пофлудить.. Видимо какой-то есть в сокете затык на эту тему. Отсюда напрашивается вывод, что надо как-то нарисованый объект от момента нажатия мыша до момента отпускания сохранить в буфер и после этого отправить в сокет... И так со следующим... Есть в AS3 какие-то возможности для такого?? Если есть, отправьте куда надо:-)) Может у кого есть готовое решение? |
|
|||||
Цитата:
|
|
|||||
Регистрация: Nov 2015
Сообщений: 46
|
Любите пофлудить? Все отправляется, но если отправлять 100 пакетов в секунду то 90% теряется.
Попробуйте увидите. Добавлено через 19 минут var command:String = sendVar; // создаем байтовый массив из строки var pack:ByteArray = new ByteArray(); pack.writeUTFBytes(command); // помещаем позицию байтового массива в занчение 0 pack.position = 0; // // отправляем в сокет длину пакета socket.writeShort(pack.length); // отправляем в сокет сам пакет socket.writeBytes(pack); socket.flush(); |
|
|||||
Цитата:
Все ваши темы звучат примерно так: "У меня что-то не работает, объясните почему. Но только по теме!" И пофиг что эта тема для телепатов. Я могу с уверенность сказать, что я делал реалтаймовые игры на сокетах, и у меня ничего не тярелось. Точнее сказать потери в сети всегда возможны, но точно не в таких объемах. Отправлять по 100 пакетов в секунду - явный перебор. Это DDOS бот что ли?) Надо делать буфер, копить какую-то инфу, и после этого отправлять. 100 раз в секунду слать что-то на сервер точно не нужно. |
|
|||||
Цитата:
__________________
Надо сменить подпись... |
|
|||||
Регистрация: Nov 2015
Сообщений: 46
|
Вы читать умеете?
Рисовалка!!! Она по движению мыши создает координаты! Координат этих туева хуча. Эти координаты я отправляю на сервер! Где я написал что у меня что-то не получается? Я спросил какие варианты реализации, потому что по сути получается ддос.. МОжет кстати по этому и теряются пакеты. Как реализовать буфер на as3? покажите пример? И до кучи вашу игру которую вы сделали, поиграю.:-)) |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
Цитата:
|
|
|||||
Регистрация: Nov 2015
Сообщений: 46
|
извините
Добавлено через 58 секунд подкиньте идею как записать движение мыша в массив??? |
|
|||||
А как получаются 100 пакетов в секунду? Что-то я при всем желании не могу это представить.
Алгоритм, который сходу придумывается: в течение N кадров/секунд записываете историю рисования (риализовываете через массив с экземплярами кастомного класса с историей), затем после этого отправляете полученный массив координат и действий в пакете. По истории посоветую сделать базовый класс, от него отнаследовать классы типа ChangeColorHistory, MouseDownHistory, MouseUpHistory, MouseMoveHistory и тд. Затем сериализуете каждую частичку истории и добавляете в пакет. По сокетам посоветую свои давнишние статьи, может быть подмогнут где-то с чем-то: http://www.flasher.ru/forum/blog.php?b=579
__________________
тут я |
|
|||||
Регистрация: Nov 2015
Сообщений: 46
|
Да я попробовал отправлять все изменения координат мыша через сокет... если мышкой медленно рисовать, то все рисуется. если быстро, то пакеты теряются и вместо круга квадрат получается.
Я в AS всего 5 день что-то делаю и во Flash CS6 поэтому про классы я не ведаю. Пишу в IDE. Алгоритм я думаю правильным такой, от нажатия мышки до отпускания собрать то что происходило с координатами в массив... А вот как собрать это в массив.... function startPic() { import flash.display.Shape; //Прорисовка линии var draw_line:Boolean = false; stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); image_mc.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove); //Фигура, в которую будут добавляться нарисованые линии var image:Shape = new Shape(); //Устанавливаем Ширину, цвет и прозрачность линии (от 0 до 1) image.graphics.lineStyle(3, 0x000000, 1); //Добавляем фигуру в клип image_mc.addChild(image); //Нажатие ЛКМ function MouseDown(mouse:MouseEvent):void { draw_line = true; //Указываем точку откуда будем начинать рисовать линию image.graphics.moveTo(mouse.localX, mouse.localY); /// вот тут пошла первая точка в сокет SendDataServer(mouse.localX,mouse.localY, 'st'); } //Отпускание ЛКМ function MouseUp(mouse:MouseEvent):void { //отключаем рисование линий draw_line = false; /// тут идет остановка в сокет SendDataServer('', '', 'stop'); } //Перемещение мыши над клипом image_mc function MouseMove(mouse:MouseEvent):void { if (draw_line) { //Рисуем линию в точку, где находится курсор image.graphics.lineTo(image.mouseX, image.mouseY); /// пошло рисование в сокет SendDataServer(mouse.localX,mouse.localY, 'on'); //Снова указываем точку откуда будем рисовать следующую линию image.graphics.moveTo(image.mouseX, image.mouseY); /// ну и тут соответственно опять в сокет SendDataServer(mouse.localX,mouse.localY, 'tw'); } } function Clear():void /// очистим экран { image.graphics.clear(); startPic(); } btn_clear.addEventListener(MouseEvent.CLICK, Clear); } startPic(); А может у меня сокет криво работает? Добавлено через 12 минут Читаю статью, интересно. function SendDataServer(a,b,c):void { /// переменные из текстового поля var sendPic = a +'x'+ b + 'x' + c; //trace(a,b,c); var command:String = sendPic; //trace (a); // создаем байтовый массив из строки var pack:ByteArray = new ByteArray(); pack.writeUTFBytes(command); // помещаем позицию байтового массива в занчение 0 pack.position = 0; // // отправляем в сокет длину пакета socket.writeShort(pack.length); // отправляем в сокет сам пакет socket.writeBytes(pack); socket.flush(); } //// отправка данных Гляньте, может у меня в отправке данных что-то не то? Или они там теряются на приеме? Или реально столько много нельзя отправлять? |
Часовой пояс GMT +4, время: 10:25. |
|
« Предыдущая тема | Следующая тема » |
|
|