Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 19.01.2010, 12:45   #1
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Непойму...

Добрый день.

создал функцию:
Function D2D_SetAnimPointer(D2D_AnimPointPatch$,SlideX%,SlideY%,StartFirst%,CountSlides%,Speed%)
	D2D_AnimPoint=LoadAnimImage(D2D_AnimPointPatch$,SlideX%,SlideY%,StartFirst%,CountSlides%)
	If D2D_AnimPoint=False Then
		RuntimeError("Ошибка в функции 'D2D_SetAnimPointer'.")
	Else
		SetAnimPointer=1
	EndIf
End Function
Использую:
D2D_SetAnimPointer("Media Files/02_1.bmp",14,20,0,11,300)
но почему то в переменной CountSlides% значений 0. Хоть я ее сделал глобальной. Почему так?
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 19.01.2010, 13:30   #2
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: Непойму...

потому что ты не приравнял значение к этой глобальной переменной. Все параметры в функции являются локальными, тебе нужно было задать локальным переменным другие названия (чтобы отделить глобальные переменные) и затем в самой функции приравнять глобальные к локальным значениям.
Вот так :
Global D2D_count
Function D2dLoadAnimImage(count)
    D2D_count = count
end function
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо H@NON за это полезное сообщение:
Arles (19.01.2010), ArtemkA (19.01.2010)
Старый 19.01.2010, 15:28   #3
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Непойму...

Function D2D_SetAnimPointer(D2D_AnimPointPatch$,SlideX%,SlideY%,StartFirst%,CountSlide%,Speed%)
D2D_AnimPoint=LoadAnimImage(D2D_AnimPointPatch$,SlideX%,SlideY%,StartFirst%,CountSlide%)
CountSlides% = CountSlide%
	If D2D_AnimPoint=False Then
		RuntimeError("Ошибка в функции 'D2D_SetAnimPointer'.")
	Else
		SetAnimPointer=1
	EndIf
End Function
Теперь должно вернуть.
Параметры функции локальны. Поэтому тебе надо записать их в функции.
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ArtemkA (19.01.2010)
Старый 19.01.2010, 21:43   #4
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

Спасибо вам обоим. Все понятно теперь. )
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 10:24   #5
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

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

Создал такой тип:
Type TButton
	Field Id%
	Field Name$
	Field Menu$
	Field X%
	Field Y%
	Field Width%
	Field Height%
	Field Disabled%
End Type
Функцией добавляю запись:
Function D2D_CreateNewButton(ButtonPatch$,ButtonName$,MenuId$,ButtonX%,ButtonY%,ButtonFlag%=0)
	Buttons.TButton=New TButton
		Buttons\Id%=LoadImage(ButtonPatch$)
		Buttons\Name$=ButtonName$
		Buttons\Menu$=MenuId$
		Buttons\X%=ButtonX%
		Buttons\Y%=ButtonY%
		Buttons\Width%=ImageWidth(Buttons\Id%)
		Buttons\Height%=ImageHeight(Buttons\Id%)
		Buttons\Disabled%=ButtonFlag%
End Function
тут все отлично работает.
Потом создал функцию, которая проверяет, находиться ли указатель мыши над данным элементом или нет.

Function D2D_MouseButtonFree%(ElementId$)
	For MButtons.TButton=Each TButton
		If MButtons\Name$=ElementId$ Then
			If D2D_MX%>MButtons\X% And D2D_MY%>MButtons\Y% And D2D_MX%<MButtons\X%+MButtons\Width% And D2D_MY%<MButtons\Y%+MButtons\Height% Then
				D2D_MouseFree%=1
			Else
				D2D_MouseFree%=0
			EndIf
		Else
			D2D_MouseFree%=3
		EndIf
	Next
	Return D2D_MouseFree%
End Function
Потом пишу так:
D2D_CreateNewButton("Media Files\07.bmp","Option_Button","Option_Menu",200,100,0) ; создаю элемент Button
; и проверяю находиться ли мышь над ним
Text 10,10,D2D_MouseButtonFree("Option_Button")
Но у меня получаеться работать только с последней записью в типе ((( В данном случае Option_Button (функция возвращает 1 если мышь находиться над ним), а если добавить еще одну запись, допустим, New_Button, то уже функция возвратит 3 (элемент не найден). Почему так происходит? Че с добавлением новой записи старые удаляються? Или я проверяю их не так? Вроде цикл For Each проходиться по всем записям в типе....подскажите пожалуйста что,где и как. ) Я с типами работаю только 2-ой день и еще не освоил их...
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 11:12   #6
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Непойму...

Код сильно не копал, но помогу тебе с логикой : Почитай про REctsOverlap.
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 11:15   #7
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

А причем тут RectsOverlap? Проблема то не в этом. У меня и так проверяеться находиться ли мышь над ним или нет. Проблема в том, что эта функция работает по последнему объекту в типе.

допустим я создам объект:
d2d_createnewbutton("img.bmp","button_1","menu",10 ,100,0)

и функция d2d_mousebuttonfree() будет прекрассно работать с объектом button_1.

а если добавлю еще один объект:
d2d_createnewbutton("img.bmp","button_2","menu",10 ,200,0)

то функция d2d_mousebuttonfree() будет прекрассно работать только с объектом button_2 а с button_1 уже ни как не будет работать. (возвратит 3, типа такой объект не найден)
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 11:24   #8
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Непойму...

Сообщение от ArtemkA Посмотреть сообщение
Потом создал функцию, которая проверяет, находиться ли указатель мыши над данным элементом или нет.
			If D2D_MX%>MButtons\X% And D2D_MY%>MButtons\Y% And D2D_MX%<MButtons\X%+MButtons\Width% And D2D_MY%<MButtons\Y%+MButtons\Height% Then
				D2D_MouseFree%=1
			Else
				D2D_MouseFree%=0
			EndIf
вот для этой операции
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 11:33   #9
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

спасибо за совет, но я почему-то недолюбливаю RectsOverlap.
#7
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 11:48   #10
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Непойму...

ArtemKa, нельзя недолюбливать Блиц ибо ты пишешь на нем ем более сам блиц своим RectsOverlap'ом проверит быстрее чем ты своим способом.
ЗЫ а твой код неверный.
Function D2D_MouseButtonFree%(ElementId$)
	For MButtons.TButton=Each TButton
		If MButtons\Name$=ElementId$ Then
			If D2D_MX%>MButtons\X% And D2D_MY%>MButtons\Y% And D2D_MX%<MButtons\X%+MButtons\Width% And D2D_MY%<MButtons\Y%+MButtons\Height% Then
				D2D_MouseFree%=1
			Else
				D2D_MouseFree%=0
			EndIf
                                 Вот здесь вся лага была, он пролетал дальше  :)
                                Exit
		Else
			D2D_MouseFree%=3
		EndIf
	Next
	Return D2D_MouseFree%
End Function
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Reizel за это полезное сообщение:
ArtemkA (24.01.2010), Harter (24.01.2010)
Старый 24.01.2010, 12:18   #11
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

ЗЫ а твой код неверный.
Не подскажешь где сдесь ошибка, я с типами еще плохо работаю....

ЗЫ. ладно, учту, буду привыкать к RectsOverlap'у )
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 12:30   #12
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Непойму...

А тут и не в типах дело просто цикл пролетает по ВСЕМ элементам, например в середине встретил нужный элемент, записал значение нужное, полетел дальше, а уже следующий элемент не подходит, поэтому значение записывается в 3 там Exit стоит если ты не заметил

ЗЫ а код то работает хоть
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ArtemkA (24.01.2010)
Старый 24.01.2010, 13:40   #13
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

Блин, из-за какого-то маленького Exit'a была возня.... Спасибо большое теперь буду знать)))

там Exit стоит если ты не заметил
Да, незаметил сначало )
ЗЫ а код то работает хоть
Да, щас работает. Спасибо.
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 14:35   #14
ArtemkA
ПроЭктировщик
 
Аватар для ArtemkA
 
Регистрация: 09.10.2008
Адрес: Казань
Сообщений: 137
Написано 7 полезных сообщений
(для 9 пользователей)
Ответ: Непойму...

А почему не работает этот код:
For Menus.TMenu=Each TMenu
		If Menus\Show%=1 Then
			For Buttons.TButton=Each TButton
				DrawImage(Buttons\Id%,Buttons\X%,Buttons\Y%)
			Next
		EndIf
	Next
ведь вроде по логике все правлильно?

второй цикл for должен выполняться если в первом цикле for переменная Menus\Show равняеться 1.
__________________
Windows 7, AMD Athlon(tn) 64 Procerssor 3500+2.21 ГГц, 1,5 Гб ОЗУ GeForce 7600 GT 256 Мб

http://vkontakte.ru/id25633980 - я тут
(Offline)
 
Ответить с цитированием
Старый 26.01.2010, 19:09   #15
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Непойму...

Он и выполняется. Ошибка в остальном коде.
З.Ы. А ты уверен, что Buttons/Id% - картинка?
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com