Форум Игромании
 
Регистрация
Справка

Программирование Создание, разработка и доработка различных игр и программного обеспечения

Ответ
 
Опции темы
Старый 27.04.2013, 07:54   #121
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
Pharaon, а поподробнее, на чём рисуешь, что именно рисуешь?

я заводил pictureBox, в итерациях фигачил статичный Bitmap, для него создавал Graphics, рисовал, потом делал

pictureBox.Image = bmp;
pictureBox.Size = bmp.Size;

насчёт минимума потерь - помни, что всё наэкранное выполняется медленнее, поэтому рисовать напрямую на панели, например - плохо.

Добавлено через 2 минуты
плюс DrawUnscaledImage() должен, в принципе, выполняться быстрее. Плюс никто не мешает написать свой unsafe метод с копированием, особенно если размеры изображений постоянны.
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ

Последний раз редактировалось $finX; 27.04.2013 в 07:56. Причина: Добавлено сообщение
$finX вне форума  
Ответить с цитированием
Старый 28.04.2013, 19:19   #122
Вечный Искатель
 
Аватар для Анкар

 
Регистрация: 07.07.2007
Сообщений: 303
Репутация: 387 [+/-]
Анимацию делаешь? Помню в Делфи был совет в этом случае не перерисовывать всё, а лишь измененную область. Если не вариант, то делай что-то типа двойной буферизации - держи в памяти два битмапа, в один записываешь всё, что надо вывести на экран, рисуешь его и параллельно готовишь второй. Но это костыль, потому что не предназначен WinForms для анимации, хоть убей, и в этом нет никакого хардкора.
__________________
Я вижу, чего ты видеть не можешь —
Видения, на глазное бельмо что похожи.
Лишь повернешься - уйдет наваждение,
Шептанием станет их тихое пение.

Затем станешь видеть то, чего нет —
Тени на месте, где должен быть свет.
Незряч, обезумел, будь отныне готов,
Век коротать свой в Зале Слепцов.
Анкар вне форума  
Ответить с цитированием
Старый 29.04.2013, 06:19   #123
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Да у меня нет анимации как таковой.
Цель такая - вывести на экран упрощенную карту мира, которая состоит из 29 регионов. У каждого региона есть свое название и они отделены друг от друга жирными границами. Есть чек бокс для того чтобы карта выводилась без названий или с ними.
Так же есть контекстное меню, которое вызывается при клике правой на регион, в нем 8 цветов, при нажатии цвет выбранного региона закрашивается, цвет границы и названия остается тем же.
Я решил создать 29 файлов с каждым регионом и вывожу их и работаю через лист. Перечисляю в массиве и вызываю рисование, да 29 раз.
Как не извращался обновление экрана постоянно занимает около 2 секунд, может будет подсказка как это все сделать попроще?

$finX,
Совет принят, но я пытался сделать что-то подобное, хотя чуть по другому, попорбую на досуге со статичным битмапом.
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 06.08.2013, 14:40   #124
Lawful Evil
 
Аватар для -PhantomX-


 
Регистрация: 23.10.2008
Адрес: г. Харьков
Сообщений: 3,039
Репутация: 308 [+/-]
Ребят, нужна помощь. Есть задача создать два потока: первый рекурсивно читает все файлы и папки в указанной папке, второй получает информацию о текущем файле/папке и отображает их в виде объекта TreeView. С первым еще более-менее все понятно:
Скрытый текст:
Код:
Thread ScanThread = new Thread(Scan);
ScanThread.Start(rootFolder);

public void Scan(object objfolder)
        {
            FolderNode Scanfolder = (FolderNode)objfolder;
            string[] dirs = Directory.GetDirectories(Scanfolder.FolderPath);
            foreach (string dir in dirs)
            {
                FolderNode tmpfolder = new FolderNode(dir);
                Invoke(new Action(() =>
                {
                    Scanfolder.Nodes.Add(tmpfolder);
                    currentFolder = tmpfolder;
                }));
                Scan(tmpfolder);
            }
            if (getFiles)
            {
                string[] files = Directory.GetFiles(Scanfolder.FolderPath);
                foreach (string file in files)
                {
                    FileNode fnode = new FileNode(file);

                    ready.WaitOne();
                    currentFile = fnode;
                    go.Set();
                }
            } 
        }

Использую две глобальные переменные currentFile и currentFolder, в которые первый поток заносит файл/папку, а второй сразу же ее считывает. Синхронизацию обеспечиваю с помощью двух объектов
Код:
static EventWaitHandle ready = new AutoResetEvent(false);
  static EventWaitHandle go = new AutoResetEvent(false);
Классы FolderNode и FileNode наследуются от System.Windows.Forms.TreeNode.
Так вот, проблема в следующем. Если во втором потоке просто заносить получаемые файлы в TreeView:
Код:
treeView1.Invoke(new Action(() =>
                    {
                        treeView1.Nodes.Add(currentFile);
                    }));
то в результате получается беспорядочный набор файлов.

Вопрос: как воспроизвести исходную файловую структуру во втором потоке? Передавать из первого потока целый объект TreeNode нельзя.
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. ©
-PhantomX- вне форума  
Отправить сообщение для -PhantomX- с помощью Skype™ Ответить с цитированием
Старый 06.08.2013, 16:42   #125
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
-PhantomX-, не стал особо вникать, но проблема не ясна. ты добавляешь в treeview всё в корень, естесн, что получается набор файлов. в чём проблема, ты не умеешь работать с древовидной структурой этого компонента или тебе неясно, как сохранять и передавать данные иерархии файлов между потоками?

и ещё вот это.
Цитата:
Сообщение от -PhantomX- Посмотреть сообщение
Передавать из первого потока целый объект TreeNode нельзя
так ты же так и делаешь - твои currentFile и currentFolder и есть объекты TreeNode, и ты их передаёшь (грубо говоря) между потоками.

и зачем эта мура с потоками? без них всё было бы гораздо проще.

Добавлено через 1 минуту
и зачем ты вообще завёл currentFolder, если нигде его не используешь?
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ

Последний раз редактировалось $finX; 06.08.2013 в 16:44. Причина: Добавлено сообщение
$finX вне форума  
Ответить с цитированием
Старый 06.08.2013, 17:07   #126
Lawful Evil
 
Аватар для -PhantomX-


 
Регистрация: 23.10.2008
Адрес: г. Харьков
Сообщений: 3,039
Репутация: 308 [+/-]
Цитата:
Сообщение от $finX Посмотреть сообщение
и зачем эта мура с потоками? без них всё было бы гораздо проще.
Такое задание, реализовать именно потоками.
Цитата:
Сообщение от $finX Посмотреть сообщение
так ты же так и делаешь - твои currentFile и currentFolder и есть объекты TreeNode, и ты их передаёшь (грубо говоря) между потоками.
Я не совсем правильно выразился. Можно было бы сразу запихать все файлы вместе с папками в один объект TreeNode еще на этапе сканирования. Он был бы красивый со всей иерархией папок и т.д. А потом перекинуть его в другой поток. Но суть задания в том, что второй поток должен получать от первого информацию о текущем файле или папке и заносить их в TreeView. Суть именно в синхронизации потоков, как я понял.
Цитата:
Сообщение от $finX Посмотреть сообщение
как сохранять и передавать данные иерархии файлов между потоками?
Вот-вот. Именно. У меня нет возможности передать файловую структуру в целом, и нужно как-то ее восстановить, имея в наличии только постоянно поступающие файлы. Или может быть можно как-то передать структуру папок и потом набить ее файлами, чтобы в итоге она выглядела точно так же, как и исходная?
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. ©

Последний раз редактировалось -PhantomX-; 06.08.2013 в 17:13.
-PhantomX- вне форума  
Отправить сообщение для -PhantomX- с помощью Skype™ Ответить с цитированием
Старый 06.08.2013, 19:07   #127
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
Цитата:
Сообщение от -PhantomX- Посмотреть сообщение
можно как-то передать структуру папок и потом набить ее файлами
именно. создаёшь свой класс, вот в нём ты делаешь так
Скрытый текст:
class MyNode : System.Windows.Forms.TreeNode
{
public bool IsFile; //вместо твоих двух разных классов - можно вообще не учитывать, ты и так не используешь это
public MyNode Parent; //сюда ты засунешь корневой каталог
//ну и что там тебе ещё нужно
}

и ты, на этапе просмотра первым потоком всех элементов текущего каталога, передаёшь в конструктор и текущий каталог, и новый перебираемый файл/папку, а в конструкторе соответственно запоминаешь в Parent родительский каталог.

прикол в том, что любое дерево можно представить как множество пар (номер узла, номер родительского узла), и, соответственно, по ним построить то, что тебе нужно. поэтому тебе проще всего просто хранить для каждого файла и папки родительскую папку. реализовывай как хочешь - хоть числовыми идентификаторами, хоть строковыми, хоть ссылками.
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием
Старый 07.08.2013, 16:18   #128
Lawful Evil
 
Аватар для -PhantomX-


 
Регистрация: 23.10.2008
Адрес: г. Харьков
Сообщений: 3,039
Репутация: 308 [+/-]
$finX, извини, если надоедаю, но можно для чайника чуть поподробней?

Допустим, моя рекурсия из первого потока посылает файл и его родительский каталог (он же текущая папка). Второй поток его в бесконечным цикле принимает. При этом файлы из-за рекурсии поступают в порядке, обратном тому, в котором они вложены (т.е., от самого внутреннего к корневой папке).
Как мне в таких условиях эти пары сортировать?

Уже неделю с этой фигней мучаюсь %(
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. ©
-PhantomX- вне форума  
Отправить сообщение для -PhantomX- с помощью Skype™ Ответить с цитированием
Старый 08.08.2013, 00:21   #129
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
-PhantomX-, ну, роди алгоритм, что ты не как дома.

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

поясняю на примере.
Скрытый текст:
у тебя подаются пары (для простоты вместо имён каталогов и файлов - просто числа):
(1, 4), (3, 4), (2, 3)

сначала лес пустой.

потом лес [(4 -> 1)]

потом лес [(4 -> 1), (4 -> 3)]. во втором дереве корневой элемент 4 встретился в первом дереве (или наоборот) - в любом случае, ты объединяешь два дерева и получаешь лес [(4 -> 1, 3)].

потом лес [(4 -> 1, 3), (3 -> 2)]. корневой элемент второго дерева 3 встретился в первом дереве. объединяешь и получаешь лес [(4 -> 1, (3 -> 2))]. единственное дерево, оригинальная структура восстановлена.
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием
Старый 05.09.2013, 14:09   #130
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
вопрос. WPF.

ввожу триггер, чтобы создать анимацию. сам вопрос простой - каким событием перехватывать нажатие кнопки мыши?

<EventTrigger RoutedEvent="UIElement.MouseDown"> - перехватывает нажатие ТОЛЬКО ПРАВОЙ кнопки.

<EventTrigger RoutedEvent="UIElement.MouseLeftButtonDown"> - вообще ничего не перехватывает, ни левую, ни правую.

нужно именно нажатие и отпускание, а не клик. нужна именно кошерная левая кнопка.

гугл мне не внемлет. кто-нибудь сталкивался?

Добавлено через 24 минуты
так. что-то таки нашлось - по-видимому, единственным вариантом остаётся PreviewMouseDown и проверка e.LeftButton == MouseButtonState.Pressed.

вопрос обновляется. вот код:

Скрытый текст:
< EventTrigger RoutedEvent="UIElement.PreviewMouseDown" >
< BeginStoryboard x:Name="OnMouseDown1_BeginStoryboard" Storyboard="{StaticResource OnMouseDown1}" / >
< / EventTrigger >


каким образом мне в xaml засунуть эту самую проверку? я пишу общий кнопочный стиль, может, там можно сделать через код на шарпе?
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ

Последний раз редактировалось $finX; 05.09.2013 в 14:34. Причина: Добавлено сообщение
$finX вне форума  
Ответить с цитированием
Старый 30.10.2013, 19:43   #131
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Задам вопрос в этой теме.
Кто имел дело с контактом - есть ли там возможность создавать опросы через апи, и какой наилучший способ сделать это на данном языке. (через апи или без)
Жду советов бывалых)
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 31.10.2013, 01:13   #132
Игроман
 
Аватар для Hast


 
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629 [+/-]
Цитата:
Сообщение от Pharaon Посмотреть сообщение
есть ли там возможность создавать опросы через апи
Судя по всему, нет. Вот список всех методов для работы с опросами: http://joxi.ru/MoRxUtg5CbDvd_pvZcQ

Цитата:
Сообщение от Pharaon Посмотреть сообщение
какой наилучший способ сделать это на данном языке. (через апи или без)
И как ты собрался делать это без апи?
Hast вне форума  
Ответить с цитированием
Старый 31.10.2013, 06:31   #133
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Hast,
Без апи - эмуляция браузера, пост запросы и т.п.

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

http://vk.com/dev/wall.post - вот тут сказано, что указав в параметре attachments тип poll, мы отправляем опрос. проблема в том что мы не знаем ид опроса.
Сам опрос возможно создать как виджет к сайту здесь - http://vk.com/dev/Poll.
Там нажав на кнопочку получить код, внизу можно увидеть ид созданного опроса, и если я вставляю этот ид в wall.post, то он появляется на стене, НО голосовать нельзя - ошибка доступа. Если же на странице создания опросов нажать кнопочку рассказать друзьям, то он также появляется на стене, с тем же ид, и отправляя программно этот ид на любую стену опрос появляется и голосовать можно.
Спрашивается, что за хрень тут зарыта?
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 31.10.2013, 16:32   #134
Игроман
 
Аватар для Hast


 
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629 [+/-]
Цитата:
Сообщение от Pharaon Посмотреть сообщение
Без апи - эмуляция браузера, пост запросы и т.п.
Желаю удачи

Хрень называется vk api. Я два года работал в геймдеве для вконтакта, и ничего хорошего о платформе сказать не могу. Поэтому такие вещи как "не может быть, что они забыли" вплоне реальны. Они только недавно более-менее нормальный референс по апи сделали. И то далеко не полный.
Hast вне форума  
Ответить с цитированием
Старый 06.11.2013, 13:31   #135
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Цитата:
Сообщение от Hast Посмотреть сообщение
Желаю удачи
Решил ужасно кривым но рабочим способом. Создаю голосовалку заполняя поля из браузер-контрола и програмно нажимаю кнопку отправить. Потом беру запись со стены wall.get там подсматриваю ид опроса, удаляю запись и уже через апи добавляю голосовалку на нужные стены в группах или польователям.

Теперь возникла вторая проблема. Все знают кнопку шаринга в соц сеть. Но что если мне нужно расшарить ссылку с описанием (своим)?
у wall.post можно добавить ссылку и она автоматом распарсится в нечто такое
Скрытый текст:

А нужно чтобы было нечто такое
Скрытый текст:


Елки палки, или мне кажется что я уже видел как подобное делали в приложениях. Вопрос на миллион - как?
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 18.11.2013, 12:50   #136
Lawful Evil
 
Аватар для -PhantomX-


 
Регистрация: 23.10.2008
Адрес: г. Харьков
Сообщений: 3,039
Репутация: 308 [+/-]
Разбирая примеры из Рихтера столкнулся с такой проблемой, что отсутствуют некоторые пространства имен. Например, System.Threading.Tasks. Установлена полная версия Visual Studio Ultimate 2012, .NET Framework версии 4.5.50709. Какие-то дополнительные компоненты нужны, чтоль?
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. ©
-PhantomX- вне форума  
Отправить сообщение для -PhantomX- с помощью Skype™ Ответить с цитированием
Старый 18.11.2013, 13:58   #137
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
-PhantomX-, должен быть в стандартной комплектации дотнета. версия дотнета в настройках проекта выставлена 4.5?
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием
Старый 18.11.2013, 15:41   #138
Lawful Evil
 
Аватар для -PhantomX-


 
Регистрация: 23.10.2008
Адрес: г. Харьков
Сообщений: 3,039
Репутация: 308 [+/-]
Да, действительно в настройках версия не та. Спасибо. Почему-то думал, что при конвертации проекта изменится и требуемая версия.
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. ©
-PhantomX- вне форума  
Отправить сообщение для -PhantomX- с помощью Skype™ Ответить с цитированием
Старый 25.01.2014, 17:51   #139
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
Подскажите народ какое решение подойдет для того чтобы автоматом загружать от 10 до 80 страниц из интернета и парсить их каждые 10 секунд, и при удобном случае вызывать яваскрипт функцию с сайта и парсить то что она открыла?

ТО что сейчас работает удовлетворительно.. на каждую загрузку поток с локером браузер-контрола, но судя по скорости это очень медленно.
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием
Старый 25.01.2014, 23:14   #140
Большой, красивый, СИНИЙ
 
Аватар для bober_maniac

 
Регистрация: 31.12.2021
Сообщений: 11,414
Репутация: 3133 [+/-]
Pharaon, разве что WebKit, но он нативный. Других способов эмулировать работу браузера нет.
bober_maniac вне форума  
Ответить с цитированием
Ответ

Метки
c#, обсуждение, помощь, программирование

Опции темы

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

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

Быстрый переход


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


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Rambler's Top100 Яндекс цитирования