purebasic.info

PureBasic forum
Текущее время: Пн окт 22, 2018 4:36 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 365 ]  На страницу Пред.  1 ... 20, 21, 22, 23, 24, 25  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 14, 2010 9:58 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
1. Имеется в виду, добавлять к исходной картинке преобладание какого-либо цвета.
И тогда цвета картинки при смешении с этим цветом изменяются:
например, синий превращается в голубой, а оранжевый - в жёлтый.
И всё происходит в реальном времени.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср сен 15, 2010 9:49 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн окт 13, 2008 4:43 pm
Сообщений: 342
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
напрямую здесь по-моему нельзя, т.к. 2Д графика убогая. Только через задницу - заранее готовить картинку с альфа каналом и при этом будут неяркие цвета. И подкладывать фон.
Для таких целей HGE рулит, чувак бери его. Там цвета можно и перемножать и складывать!
PS Ты почитай, что в справочнике написано при бленд-режимы. Может там Фред что-то и накосячил.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 16, 2010 10:31 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ты прав, дружище, при опытах на графике изучать движки очень даже полезно. Благо, возможности там заоблачные. Сам видел.
Однако же, с изучением сторонних пакетов решил повременить, а сначала, на свой страх и риск, воспользоваться тем, что есть. Немного покумекал, и понял, что задачки 1 и 2 решить на исходном движке вполне можно!

Чтение и вывод пикселов нам в помощь. Плюс общий массив, хранящий данные о номере, ширине и высоте картинки. Делаем его максимальным, чтобы в его размеры могли войти размеры самой большой картинки.
И вот, сначала считываем данные пикселов картинки в этот массив. Затем удаляем эту картинку и создаём новую - такую же, но пустую.
И когда надо её выводить - заходим в неё (пустую) и заполняем её пикселами из массива.
И вот здесь к значению пиксела (ячейки массива) можно добавить ЛЮБОЙ другой цвет. И тогда вся картинка изменится в цвете. А можно работать и с каким-либо отдельным цветом.
И затем выводим картинку обычной функцией DisplaySprite().
Для работы нужны лишь две небольшие функции - чтение и запись пикселов.

Я сделал один пример - отлично работает, без проблем. Правда, не надеюсь, что он кому-нибудь понадобится...

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
; Изменяем гамму картинки
; (одна из вариаций)
 
Global width = 640
Global height = 480
Global depth = 16
 
Global gamma = 0
Global mx,my
 
Global Dim spr.i(2,96,96)
 
;===================================================
Procedure ReadPix(num)
 
        Shared x1,y1,sprw,sprh
 
        sprw = SpriteWidth(num) - 1
        sprh = SpriteHeight(num) - 1
 
        StartDrawing(SpriteOutput(num))
 
                For y1 = 0 To sprh
                        For x1 = 0 To sprw
                                spr(num,x1,y1) = Point(x1,y1)
                        Next
                Next
 
        StopDrawing()
 
        FreeSprite(num)
        CreateSprite(num,sprw,sprh)
 
EndProcedure
 
Procedure WritePix(num)
 
        Shared x1,y1,sprw,sprh
 
        sprw = SpriteWidth(num) - 1
        sprh = SpriteHeight(num) - 1
 
        StartDrawing(SpriteOutput((num)))
 
        For y1 = 0 To sprh
                For x1 = 0 To sprw
                        Plot(x1,y1,spr(num,x1,y1) + gamma)
                Next
        Next
 
        StopDrawing()
 
EndProcedure
 
;===================================================
If InitSprite() = 0 : End : EndIf
If InitMouse() = 0 : End : EndIf
 
OpenScreen(width,height,depth,"")
 
LoadSprite(0,"PLAYA1.bmp")
LoadSprite(1,"SOULA0.bmp")
LoadSprite(2,"TLMPA0.bmp")
 
ReadPix(0)
ReadPix(1)
ReadPix(2)
 
Repeat
 
        ExamineMouse()
 
        If MouseButton(#PB_MouseButton_Right)
                gamma = Random($dddef) ; RGB(0,128,255)
        Else
                gamma = 0
        EndIf
 
        mx = MouseX()
        my = MouseY()
 
        WritePix(0)
        WritePix(1)
        WritePix(2)
 
        DisplaySprite(0,mx,my)
        DisplaySprite(1,mx+128,my)
        DisplaySprite(2,mx,my+128)
 
        StartDrawing(ScreenOutput())
                DrawText(0,0,"Левая кнопка мыши - выход")
                DrawText(0,15,"Правая кнопка мыши - изм. гаммы")
        StopDrawing()
 
        FlipBuffers()
        ClearScreen(RGB(0,96,128))
 
Until MouseButton(#PB_MouseButton_Left)
 
CloseScreen()
End



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 19, 2010 9:19 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб авг 18, 2007 6:26 pm
Сообщений: 605
Откуда: Северодвинск/Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Morganolla писал(а):
напрямую здесь по-моему нельзя, т.к. 2Д графика убогая.

Интересно, как же я это делал? =) Впрочем, как выяснилось, тот код с новой подсистемой (DirectX9) уже работает неправильно - но наверняка можно поправить.

_________________
http://www.youtube.com/watch?v=XHosLhPEN3k


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 24, 2010 5:16 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вот такой простой вопрос:
Как можно работать с частотой кадров (например, изменять 60 герц на 50) ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 26, 2010 12:18 pm 
Не в сети
доцент

Зарегистрирован: Сб мар 10, 2007 3:50 pm
Сообщений: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
MrApple писал(а):
Вот такой простой вопрос:
Как можно работать с частотой кадров (например, изменять 60 герц на 50) ?


Поставит Delay() в основной цикл проги. Больше ничего не приходит в голову


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 26, 2010 1:06 pm 
Не в сети
профессор

Зарегистрирован: Вс окт 25, 2009 5:48 pm
Сообщений: 263
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
MrApple писал(а):
Вот такой простой вопрос:
Как можно работать с частотой кадров (например, изменять 60 герц на 50) ?


SetFrameRate(FrameRate)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 20, 2011 12:13 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
1. Подскажите, есть ли пример алгоритма движение к заданной точке? Как делают, например, в стратегиях - при перемещении юнитов, в стрелялках - при движении монстров.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 20, 2011 2:19 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
MrApple
Алгоритмов много. Вот тут подробненько расписано.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн сен 05, 2011 5:52 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб авг 18, 2007 6:26 pm
Сообщений: 605
Откуда: Северодвинск/Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
MrApple писал(а):
1. Имеется в виду, добавлять к исходной картинке преобладание какого-либо цвета.
И тогда цвета картинки при смешении с этим цветом изменяются:
например, синий превращается в голубой, а оранжевый - в жёлтый.
И всё происходит в реальном времени.

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

_________________
http://www.youtube.com/watch?v=XHosLhPEN3k


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 20, 2011 8:28 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Возможно ли установить полный экран в разрешение, которое НЕ поддерживается драйверами?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 20, 2011 8:54 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
MrApple писал(а):
озможно ли установить полный экран в разрешение, которое НЕ поддерживается драйверами?

Сам то как думаешь :?:

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 20, 2011 10:26 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
Сам то как думаешь?
Можно, вроде бы, с помощью API-функций (вот только разбираюсь в них слабенько). Или же помудрить с оконным режимом. В кодархиве много полезных решений, но такой задачи не повстречалось :(


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт сен 20, 2011 10:32 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
MrApple писал(а):
Можно, вроде бы, с помощью API-функций

Ну как можно, если не поддерживается?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 29, 2011 11:11 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 12:46 pm
Сообщений: 44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вот у меня есть набор некоторых действий. Как мне задавать эти действия, чтобы они выполнялись последовательно, одно за другим?
1. Герой 1 подошёл к пункту А.
2. Проиграла музыка.
3. Герой 2 подошёл к пункту Б.
4. Герой 2 проиграл анимацию.
5. и т. д.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 365 ]  На страницу Пред.  1 ... 20, 21, 22, 23, 24, 25  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB