Jump to content
Korean Random

Браузер. CEF. Flash


Go to solution Solved by SoprachevAK,

Recommended Posts

3 часа назад, SoprachevAK сказал:

А кто нибудь может мне подсказать как во флеше превратить png картинку в проекте в картинку в коде (Bitmap или что угодно другое)

Попробуй использовать элемент Image, не помню в каком из guiControls* он находится.

Изображение посасываться через атрибут source.

 

public var image: Image;

override protected function onPopulate (): void {
    super.onPopulate();
    image.source = "relative_path_to_image"
}

 

Link to comment
Short link
Share on other sites

Posted (edited)
19 часов назад, yepev сказал:

@SoprachevAK как говорится, в любой непонятной ситуации, смотри в исходники XVM :laugh:

 

Кейворд: sixthsense.png

На самом деле именно от туда и начал, я от туда вообще стащил скрипт для билда через CLI, но картинки у них грузятся супер неочевидно каким то своим инжектором. 
image.thumb.png.b865e6a7ef009f5f2e6bbad4ce5c5810.png

Вообще, как я понял, картинки грузятся вот так

```as

[Embed(source="lock.png")]

[Bindable]

public var lockImgClass:Class;
```

Но оно требует каких то других флешевых либ (Adobe Flex SDK), которые xvm вообще тащит как либы, но у меня с ними тупо игра крашится, хотя файлы либ взял прямо из xwm, наверное неправильно готовлю, да и как будто бы должен быть более нативный способ. 

А ещё я потыкал декомпилятором все флешки которые нашел в xwm, и в них нет картинок, честно говоря я не представляю куда они кладут эти PNG



________

18 часов назад, Valberton сказал:

Попробуй использовать элемент Image, не помню в каком из guiControls* он находится.

Изображение посасываться через атрибут source.

 

public var image: Image;

override protected function onPopulate (): void {
    super.onPopulate();
    image.source = "relative_path_to_image"
}

 

Это я тоже находил, но это неизвестно на этапе компиляции, и непонятно как объяснить компилятору, что ему нужна эта картинка
Или там наверное можно просто в /flash положить, а не внутри .swf

Edited by SoprachevAK
Link to comment
Short link
Share on other sites

5 часов назад, SoprachevAK сказал:

Это я тоже находил, но это неизвестно на этапе компиляции, и непонятно как объяснить компилятору, что ему нужна эта картинка

Или там наверное можно просто в /flash положить, а не внутри .swf

Так я тебе буквально код кинул. Просто путь к картинке прописываешь и все.

  • Upvote 1
Link to comment
Short link
Share on other sites

8 часов назад, SoprachevAK сказал:

А ещё я потыкал декомпилятором все флешки которые нашел в xwm, и в них нет картинок, честно говоря я не представляю куда они кладут эти PNG

А прямо куда удобно, файликом. Хоть локально, хоть на сервер. Во флешки не зашивают - это было бы слишком сложно для юзеров, которые через XVM подменяют картинки)

  • Upvote 1
Link to comment
Short link
Share on other sites

7 часов назад, yepev сказал:

Во флешки не зашивают - это было бы слишком сложно для юзеров

ну вот потому что да, xvm подразумевает, что юзеры менять будут, а мне то нужно чисто спрайты для кнопочек, которые ну вот максимально очевидно внутрь флеша

И если бы я не смотрел на моды Полироида, где спрайты внутри флешки, я бы и не парился, но ведь можно же как то запихнуть внутрь

Link to comment
Short link
Share on other sites

10 часов назад, Valberton сказал:

Просто путь к картинке прописываешь и все

Так путь к картинке то не внутри флеш файла, а во внешнем мире
Мне там на самом деле этот подход ещё и не совсем удобен, мне нужно синхронно в BitMap, иначе бы я и через Loader смог

Но возможно есть смысл просто пайплайн изменить и лепить на экран эту танковую Image, пусть сама там загружается когда захочет

Link to comment
Short link
Share on other sites

5 минут назад, SoprachevAK сказал:

а мне то нужно чисто спрайты для кнопочек, которые ну вот максимально очевидно внутрь флеша

А зачем? Положи их просто в .wotmod вместе с остальными файлами мода. Распространять всё-равно сможешь как один пакет.

Link to comment
Short link
Share on other sites

4 часа назад, yepev сказал:

А зачем? Положи их просто в .wotmod вместе с остальными файлами мода. Распространять всё-равно сможешь как один пакет.

Перфекционизм)

Но вообще, скорее всего, они подгружаются асинхронно, и не всегда это удобно. Но в принципе я сделал через Image как советовал @Valberton, и для моих задач подошло, картинки в wotmod, но и ладно, там и похуже костыли с этим cef'ом

Link to comment
Short link
Share on other sites

Забавный факт, если в коллбеке на сокета ProgressEvent.SOCKET_DATA читать socket.readBytes(buffer, 0, socket.bytesAvailable), то время от времяни (раз в 4-20 чтений) случается EOFError: AS3 Net Socket: Failed to read Bytes, а если делать тоже самое, но читать автоматически до конца, что по сути тоже самое socket.readBytes(buffer, 0, 0), то работает стабильно хорошо. 

Видимо у флешевого сокета кривая буфферизация

В первом случае игра крашится без логов но с краш-репортом примерно через 20-30 секунд, во втором случае через 10-15 минут. Танковый краш репортер ворует репорт спустя пару секунд после краша, так что пока я не знаю что в нём)

  • Upvote 1
Link to comment
Short link
Share on other sites

Posted (edited)

А кто нибудь мне подскажет, что такое ByteArray.compress и ByteArray.uncompress в танковом флеше. Оно определённо компрессит и декомпроссит, но я не понимаю во что
Выглядит как zlib, но с какими то странностями

 

——

Разобрался, это обычный zlib, а странности были в одном пропущенном байте в моём кастомном буфферизаторе) 

Edited by SoprachevAK
  • Upvote 1
Link to comment
Short link
Share on other sites

7 часов назад, SoprachevAK сказал:

*футаж с донатом*

А вот это прикольная тема. Владельцам только одного монитора будет полезно.

Link to comment
Short link
Share on other sites

6 часов назад, Valberton сказал:

А вот это прикольная тема. Владельцам только одного монитора будет полезно.

Ну вообще не только, это скорее для разных игровых виджетов например для всяких турниров.

Я хочу ещё провайдер данных сделать, чтоб в виджет поступала какая нибудь информация об игре: результаты боя, урон, хп

 

но это если оно мне перестанет игру крашить, иначе затея впустую 

Link to comment
Short link
Share on other sites

3 минуты назад, SoprachevAK сказал:

но это если оно мне перестанет игру крашить, иначе затея впустую 

Ну не впустую, ведь есть план Б: выкинуть флеш и рисовать через D3D :smile:

 

Link to comment
Short link
Share on other sites

6 минут назад, yepev сказал:

Ну не впустую, ведь есть план Б: выкинуть флеш и рисовать через D3D :smile:

 

Ну вообще конечно такой вариант есть, а флеш оставить чисто для кнопочек с настройками, но я там полистал, выглядит страшно 


Хотел было я сказать, что танковый браузер скорее всего так и сделан, но чёт нашел https://github.com/IzeBerg/wot-src/blob/RU/sources-as3/gui_lobby/scripts/net/wg/gui/lobby/browser/Browser.as вот это, где они просто картинку по url грузят. Но я сомневаюсь, что это они в 60фпс грузят скриншоты. Учитывая, что там даже ютуб неплохо работает, то скорее всего оно на аппаратном ускорители, а значит выводится сразу на экран. 

Link to comment
Short link
Share on other sites

Попробовал минимальный пример, реально крашится из-за сокета. Когда данные по нему ходят, со временем случается рандомная ошибка. Пока данные не ходят, всё норм. Если сокетов одновременно несколько, ошибки случаются чаще чем линейно. Могу предположить, что сборщик мусора собирает что то лишнее. 
 

Потыкал DAAPI, не нашел в нём способа передать ByteArray, зато можно передать String любой длины и как будто бы даже быстро (без лагов), так что завтра повтыкаю в кодировки, и попробую сокеты слушать в танковом питоне, а во флеш отправлять уже картинку (png байты) 

 

ps. Самому страшно от количества костылей, через которые картинка проходит между процессором и монитором)

  • Upvote 1
Link to comment
Short link
Share on other sites

Сделал передачу картинки из питона во флеш по DAAPI, кодирую в base64, потому в utf8 и передаю как стрингу, потом во флеше крайне неоптимально декодирую обратно в байты. Оно работает, не крашится, и даже 60фпс тянет без особых проблем. 
Нужно конечно сильно порефакторить, но способ рабочий. 
Скорее всего, будет оптимальнее передавать через массив uint’ов, как будто бы оно по байтам оптимальнее будет, да и декодирование быстрее получится. Но это уже вопрос кодека. 

  • Upvote 1
Link to comment
Short link
Share on other sites

Posted (edited)

Картинка танкового сайта весит 250к интов
Превращаю байты в инты в питоне, передаю во флеш, декодирую обратно
Вот кодирование и передача мгновенные, но ПУСТОЙ ЦИКЛ во флеше до 250к выжирает весь мой процессор (одно ядро, на котором основной поток танков)

Вот буквально пустой цикл. 
image.thumb.png.abb896b4b5e9db27b55cda5068969d61.png

Как будто бы надо мучать всякие нативные декодеры, пусть и менее оптимальные по памяти. 
Есть надежда на writeMultiByte(value:String, charSet:String):void, но надо будет подобрать charSet который фиксированной ширины и полностью её покрывает


PS. С моими wotstat виджетами работает супер хорошо (скорее всего они очень хорошо сжимаются), а вот какой нибудь видос открыть с высоким битрейтом уже проблема

Edited by SoprachevAK
  • Upvote 1
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...