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

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

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

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

Ответ
 
Опции темы
Старый 22.06.2012, 09:59   #1
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
создание записи во втором типе через первый

Собственно идея такова , создать связанный список типов и при необходимости заменить в первом типе значение на значение второго типа.
вот код:
увы выдаёт ошибку
Подскажите как правильно сделать !
хочется избежать пробежки по каждому типу в отдельности
Type tsecond	 ;второй тип
Field  f  
End Type

Type tfirst		 ;первый тип
Field ab.tsecond ,d  	; ab.tsecond - ссылка на второй тип
End Type

Graphics 800,600
SetBuffer BackBuffer()
q.tfirst= jac()	;создание записи в первом типе
;q\d=  4


q\ab.tsecond =dak()	;создание записи во втором типе через первый
;q\ab\f= 1

	; присвоение значения первого типа второму 
While Not KeyHit(1) 
;If ab.tsecond <> Null Then 
q\ab\f = q\d 
;EndIf 
For q.tfirst=Each tfirst

Text 10,20,"q\d - "+q\d;+" | "+q\y+"  q\d# -  "+q\d#+ "  " ;вывод значений x и y
Text 10,30, "q\ab\f - "+q\ab\f;+" | ";+ q\ab\f ;вывод z#

Next

Flip
Wend 
Delete Each tsecond
Delete Each tfirst
End  

WaitKey()
Function jac.tfirst()
	Local pff.tfirst= New tfirst
	pff\d = 4
	Return pff
End Function

Function dak.tsecond ()
	Local pdd.tsecond = New tsecond 
	pdd\f= 1
	Return pdd
End Function
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 10:26   #2
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,373
Написано 488 полезных сообщений
(для 881 пользователей)
Ответ: создание записи во втором типе через первый

Всё дело в переменной "q".
Ты перед главным циклом в неё присваиваешь новый объект, а затем в цикле вайл проходишь фором по списку, используя всё ту же q. При завершении for... each... в q содержится Null. Обрати внимание что на экране нарисаван текст, т.е. один раз главный цикл крутанулся.
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 10:31   #3
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: создание записи во втором типе через первый

Поменял на
For w.tfirst=Each tfirst

Text 10,20,"w\d - "+w\d;+" | "+w\y+"  w\d# -  "+w\d#+ "  " ;вывод значений x и y
Text 10,30, "w\ab\f - "+w\ab\f;+" | ";+ w\ab\f ;вывод z#

Next
Заработало ...
Спасибо !
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 10:46   #4
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: создание записи во втором типе через первый

А как динамически присваивать ? например MouseX()
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 10:58   #5
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: создание записи во втором типе через первый

Однако ,нашёл примеры буду разбирать .
примеры здесь:
http://blitzetc.blitzmax.ru/index.php/%D0%9A%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3:Blitz3D _-_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80% D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 12:18   #6
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: создание записи во втором типе через первый

Вот разобрался ...
Код -ответ на свой вопрос :
Global mx , my ,ab.hero

Type hero	 ;второй тип
Field  x ,y 
End Type

Type map	 ;первый тип
Field ab.hero
Field x ,y  	; ab.tsecond - ссылка на второй тип
End Type

Graphics 800,600
SetBuffer BackBuffer()
mx = MouseX() : my = MouseY()
q.map=CreateMap()	;создание записи в первом типе
;q\d=  4

q\ab.hero =CreateHero()	;создание записи во втором типе через первый
;q\ab\f= 1

While Not KeyHit(1) 
Cls

;If KeyHit(3) Then 
If KeyHit(2) Then q\ab\x=   q\x : q\ab\y=   q\y

For w.map=Each map
	If MouseDown(1)Then 
		w\x =MouseX()
		w\y =MouseY()
		w\ab\x = w\x       ; присвоение значения первого типа второму 
		w\ab\y = w\y      ;
	EndIf 
	If MouseDown(2)Then 
		w\ab\x = MouseX()
		w\ab\y = MouseY()
	EndIf 
	
Text w\x,w\y,"q\x - "+w\x+" | w\y - "+w\y ;вывод значений x и y
Text w\ab\x,w\ab\y+10, "q\ab\x - "+w\ab\x+" | w\ab\y - "+ w\ab\y 

Next

Flip
Wend 
Delete Each hero
Delete Each map
End  

WaitKey()
Function CreateMap.map()
	Local pff.map= New map
	pff\ab.hero = Null 
	pff\x = 400
	pff\y = 200
	Return pff
End Function

Function CreateHero.hero()
	Local ab.hero= New hero
	ab\x= Rnd( 100,600)
	ab\y= Rnd( 100,400)
	Return ab
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (22.06.2012)
Старый 22.06.2012, 14:52   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,373
Написано 488 полезных сообщений
(для 881 пользователей)
Ответ: создание записи во втором типе через первый

Расскажи в чём тут "фишка"?
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 15:58   #8
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: создание записи во втором типе через первый

Смотри мою предыдущую тему про гексагоны.
хочется избавиться от многих прохождений по разным спискам
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 02:34.


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