HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1911  
Старый 21.12.2016, 11:56
NarutoUA
Постоянный
Регистрация: 26.05.2013
Сообщений: 692
С нами: 6822856

Репутация: 213


По умолчанию

Цитата:
Сообщение от Potniy  

Что лучше : загружать текстуру или рендрить ? Пример: текстура 500х500px синяя или же DrawBox ?
Лучше самому отрисовать, но средствами DX9 (вертекс буффером).
 
Ответить с цитированием

  #1912  
Старый 27.12.2016, 23:52
TheMY3
Познающий
Регистрация: 26.12.2016
Сообщений: 61
С нами: 4936063

Репутация: 58
По умолчанию

Наведите на правильную мысль, вот к примеру есть функция отрисовки:

C++:





Код:
bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
// если рендерер готов к рисованию
{
// рисуем
SF
->
getRender
(
)
->
DrawBox
(
50
,
500
,
100
,
250
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
// завершаем рисование
}
;
return
true
;
// возвращаем положительный результат
}
;


В mainloop() я хочу сделать следующее:

C++:





Код:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
'H'
)
)
// если нажата клавиша H (англ)
{
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
Present
)
;
//Рисую блок
pFont
=
SF
->
getRender
(
)
->
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
pFont
->
Print
(
"текст"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
45
,
505
,
false
)
;
//Добавляю к нему текст
}
;


Но сам вопрос, как мне скрывать этот блок при нажатии на другую клавишу? Я так понимаю надо будет вывести переменную глобально со статусом блока, но вот как убрать отрисованый блок это я не нашел в API.

И ещё сразу вопрос, когда я делаю сначала SF->getRender()->registerD3DCallback а потом текст, то я текст не вижу, а если в функцию добавлю текст:

C++:





Код:
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
// если рендерер готов к рисованию
{
// рисуем
SF
->
getRender
(
)
->
DrawBox
(
50
,
500
,
100
,
250
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
)
;
pFont
=
SF
->
getRender
(
)
->
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
pFont
->
Print
(
"текст"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
45
,
505
,
false
)
;
//Добавляю к нему текст
SF
->
getRender
(
)
->
EndRender
(
)
;
// завершаем рисование
}
;


То рисует текст поверх блока и вылетает клиент, как разместить нормально текст на блоке?
 
Ответить с цитированием

  #1913  
Старый 28.12.2016, 00:45
BlackKnigga
Постоянный
Регистрация: 10.01.2016
Сообщений: 922
С нами: 5441999

Репутация: 133


По умолчанию

Цитата:
Сообщение от Jadson  

но вот как убрать отрисованый блок это я не нашел в API.
Он сам пропадает если перестать его рисовать

Цитата:
Сообщение от Jadson  

И ещё сразу вопрос
Шрифт достаточно создать один раз, где нибудь в цикле mainloop перед init = true;
 
Ответить с цитированием

  #1914  
Старый 28.12.2016, 00:56
TheMY3
Познающий
Регистрация: 26.12.2016
Сообщений: 61
С нами: 4936063

Репутация: 58
По умолчанию

Цитата:
Сообщение от BlackKnigga  

Он сам пропадает если перестать его рисовать
SF->getRender()->EndRender(); // завершаем рисование

Я так понял о этом речь? Но вот сейчас я нажал клавишу, появился блок и он уже не пропадает даже если я выхожу в меню, что я тогда не так делаю?
 
Ответить с цитированием

  #1915  
Старый 28.12.2016, 01:07
BlackKnigga
Постоянный
Регистрация: 10.01.2016
Сообщений: 922
С нами: 5441999

Репутация: 133


По умолчанию

Цитата:
Сообщение от Jadson  

SF->getRender()->EndRender(); // завершаем рисование
Я так понял о этом речь? Но вот сейчас я нажал клавишу, появился блок и он уже не пропадает даже если я выхожу в меню, что я тогда не так делаю?
Ты нажал клавишу и зарегистрировал коллбек (registerD3DCallback) который рисует постоянно. Это не вызов рисования единожды. Чтобы перестать рисовать тебе нужно перестать выполнять функции рисования в методе Present (DrawBox и Print).
 
Ответить с цитированием

  #1916  
Старый 28.12.2016, 01:09
2Shae
Участник форума
Регистрация: 14.05.2014
Сообщений: 149
С нами: 6314183

Репутация: 68
По умолчанию

Цитата:
Сообщение от Jadson  

SF->getRender()->EndRender(); // завершаем рисование
Я так понял о этом речь? Но вот сейчас я нажал клавишу, появился блок и он уже не пропадает даже если я выхожу в меню, что я тогда не так делаю?
(Для примера)

Насчёт меню - делай проверку, замени:

Код:





Код:
if (SUCCEEDED(SF->getRender()->BeginRender()))


на

Код:





Код:
if (SUCCEEDED(SF->getRender()->BeginRender()) && !SF->getGame()->isGTAMenuActive())


Аналогично с отображением, сделай глобальную переменную, к примеру, bool render и делай проверку на true/false:

Код:





Код:
if (SUCCEEDED(SF->getRender()->BeginRender()) && !SF->getGame()->isGTAMenuActive() && render == true)
 
Ответить с цитированием

  #1917  
Старый 28.12.2016, 01:18
TheMY3
Познающий
Регистрация: 26.12.2016
Сообщений: 61
С нами: 4936063

Репутация: 58
По умолчанию

Цитата:
Сообщение от BlackKnigga  

Ты нажал клавишу и зарегистрировал коллбек (registerD3DCallback) который рисует постоянно. Это не вызов рисования единожды.
Как тогда вызвать рисование 1 раз? Вопросов много, а доки нет, поэтому извиняйте.

И ещё вопрос, в консоли в игре есть дебаг мод, я могу отправлять сообщения в консоль вместо вывода в чат к примеру сообщения о том что происходит?
 
Ответить с цитированием

  #1918  
Старый 28.12.2016, 01:34
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

1 раз? 1 раз - это один кард.Я конечно все понимаю, что у каждого свои увлечения, но зачем делать приложения под винды с убунты?
 
Ответить с цитированием

  #1919  
Старый 28.12.2016, 01:42
TheMY3
Познающий
Регистрация: 26.12.2016
Сообщений: 61
С нами: 4936063

Репутация: 58
По умолчанию

Цитата:
Сообщение от Dark_Knight  

1 раз? 1 раз - это один кард.Я конечно все понимаю, что у каждого свои увлечения, но зачем делать приложения под винды с убунты?
Ну на работе у меня Ubuntu+Windows, но т.к. я работаю в Ubuntu то думал и это учить там же не перегружаясь, в SAMP я иногда захожу через Wine . Дома там же 2 операционки, но т.к. дома в основном с WIndows тут проблем нет, работаю с под неё.
 
Ответить с цитированием

  #1920  
Старый 28.12.2016, 02:59
Oppenhem
Новичок
Регистрация: 05.12.2016
Сообщений: 2
С нами: 4966293

Репутация: 3
По умолчанию

Есть диалог 2-ого стиля(LIST), нужно после его закрытия вывести номер последней выделенной строки. Но если диалог был закрыт с помощью ESC ничего не выводить.

C++:





Код:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
VK_NUMPAD0
)
)
{
char
buf2
[
128
]
;
char
buf1
[
]
=
"Test"
;
sprintf
(
buf2
,
"[%d]\n[%d]\n[%d]\n[%d]\n[%d]"
,
0
,
1
,
2
,
3
,
4
)
;
SF
->
getSAMP
(
)
->
getDialog
(
)
->
ShowDialog
(
1
,
2
,
buf1
,
buf2
,
"Enter"
,
""
)
;
dialogWasActive
=
1
;
}
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
VK_ESCAPE
)
)
{
dialogWasActive
=
0
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"esc"
)
;
}
if
(
!
(
SF
->
getSAMP
(
)
->
getDialog
(
)
->
iIsActive
)
&
(
dialogWasActive
==
1
)
)
{
int
item
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
ListBoxGetIndex
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"item = %d"
,
item
)
;
dialogWasActive
=
0
;
}


Вроде всё правильно, но isKeyPressed(VK_ESCAPE) не работает в диалоге.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...