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

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

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

Ответ
 
Опции темы
Старый 30.04.2008, 18:45   #16
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: Ptr и Var : как работает ?

Global list:TList = New TList
Type TType
	Field varr:int
	Function create_v:TType( _param:int ) 
		Local cre:TType = New TType
		cre.varr = _param
                       list.AddLast(cre)
		Return cre
	End Function
End Type
Local obj:TType=TType.create_v( 5 )
__________________
(Offline)
 
Ответить с цитированием
Старый 30.04.2008, 19:06   #17
Bagration
Знающий
 
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений
(для 21 пользователей)
Ответ: Ptr и Var : как работает ?

О_0 /. Гы, вы меня не поняли. Мне не нужно присваивать переменной какое то значение какойто переменной, а указатель, что бы при изменении переменной-указателя менялось значение указываемой переменной. Как в случае с моим кодом...
(Offline)
 
Ответить с цитированием
Старый 30.04.2008, 19:10   #18
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Ptr и Var : как работает ?

Там ты прибовляешь к mode колличество созданных объектов..
Ы? Я туплю или ты меня завернул в салфетку..
(Offline)
 
Ответить с цитированием
Старый 30.04.2008, 21:13   #19
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: Ptr и Var : как работает ?

Хочу помочь. но я ничего не понял, если честно.
__________________
(Offline)
 
Ответить с цитированием
Старый 01.05.2008, 18:09   #20
Bagration
Знающий
 
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений
(для 21 пользователей)
Плохо Ответ: Ptr и Var : как работает ?

Вот представим, имеется меню, кнопки, при нажатии определенной кнопки меняется значение глобальной переменной а переменной типа меню. Делается это указателями, то есть я не передаю значение а лишь даю понять проге какую переменную надо увеличить или уменьшить , короче не важно действия, главное суть. Вот ниже я привел пример:
Global ButtonList:TList = New TList
'varriables
Global varriable_1:Int
Global varriable_2:Int
Global varriable_3:Int
Type TButtonGUI
	Field pos_x:Int, pos_y:Int
	Field color:Int[4] 
	Field txt:String
	Function Button:TButtonGUI(txt:String, pos_x:Int, pos_y:Int) 
		Local Button:TButtonGUI = New TButtonGUI
			button.txt = txt
			button.pos_x = pos_x
			button.pos_y = pos_Y
			button.color[1] = 0
			button.color[2] = 0
			button.color[3] = 128
			ButtonList.AddLast(Button) 
	End Function
	Method update(name:String, ukazatel Var) 
		If MouseX() >= pos_x And MouseY() >= pos_y And MouseX() <= pos_x + 250 And MouseY() <= pos_y + 70 Then
			color[1] = 255
			color[2] = 0
			color[3] = 0
			If txt = name Then
				If MouseHit(1) Then
					ukazatel:+1
				End If
			End If
			Else
			color[1] = 0
			color[2] = 0
			color[3] = 128
		End If
		
	End Method
	Method draw() 
		SetColor(color[1] , color[2] , color[3] ) 
		DrawRect(pos_x, pos_y, 250, 70) 
		SetColor(0, 0, 0) 
		DrawText(txt, pos_x + 125 - TextWidth(txt) *.5, pos_y + 35 - TextHeight(txt) *.5) 
	End Method
End Type
Function UpdateButton(txt:String, ukazatel Var) 
	For Local up_button:TButtonGUI = EachIn ButtonList
		up_button.update(txt, ukazatel) 
		up_button.draw
	Next
End Function
 
Graphics (800, 600, 0, 60, 2) 

HideMouse
TButtonGUI.Button("Varriable 1", 50, 100) 
TButtonGUI.Button("Varriable 2", 50, 300) 
TButtonGUI.Button("Varriable 3", 50, 500) 

While Not KeyHit(KEY_ESCAPE) 
	Cls
	UpdateButton("Varriable 1", varriable_1) 
	UpdateButton("Varriable 2", varriable_2) 
	UpdateButton("Varriable 3", varriable_3) 
	'cursor
	SetColor(255, 255, 255) 
	DrawOval(MouseX(), MouseY(), 4, 4) 
	'txt
	SetColor(255, 255, 255) 
	DrawText("MouseX: " + MouseX(), 20, 20) 
	DrawText("MouseY: " + MouseY(), 20, 40) 
	DrawText("Varriable 1 = " + varriable_1, 600, 20) 
	DrawText("Varriable 2 = " + varriable_2, 600, 40) 
	DrawText("Varriable 3 = " + varriable_3, 600, 60) 
	Flip
Wend
Здесь я создал 3 кнопки, потом в упдейте дал указания какой кнопке какую переменную увеличить.
UpdateButton("Varriable 1", varriable_1)
UpdateButton("Varriable 2", varriable_2)
UpdateButton("Varriable 3", varriable_3)
Жирными буквами указаны указатели.
А нельзя ли скажем добавить в типе меню еще переменную указатель, Varriable , которая будет хранить указатель на нужную переменную, но тип филда не могу задать . Потом создание кнопок будет уже следующим:
TButtonGUI.Button("Varriable 1", 50, 100,varriable_1)
TButtonGUI.Button("Varriable 1", 50, 100,varriable_2)
TButtonGUI.Button("Varriable 1", 50, 100,varriable_3)
Потом исходя из того что в типе меню есть переменная указатель, то в упдейте просто увеличивается Varriable(указатель) на 1 или еще что. (смотреть метод обновления). Тогда теоретически не придеться каждый раз вызывать Упдейт с разными значениями.
Как думаете такое возможно?
Надеюсь я понятно изьяснился.
(Offline)
 
Ответить с цитированием
Старый 02.05.2008, 21:37   #21
Bagration
Знающий
 
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений
(для 21 пользователей)
Смех Ответ: Ptr и Var : как работает ?

Я не понятно выразился или такое не возможно сделать?
(Offline)
 
Ответить с цитированием
Старый 02.05.2008, 21:46   #22
FDsagizi
Бывалый
 
Аватар для FDsagizi
 
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений
(для 509 пользователей)
Ответ: Ptr и Var : как работает ?

Объясняеш ты ППЦ как нормально.

ЗЫ ему надо хранить указатель на какуюто переменую.
__________________
Жизнь как говориться игра- делать игры моя профессия(с)

Программирование, это религия! Её нужно исповедовать.
(Offline)
 
Ответить с цитированием
Старый 04.05.2008, 23:45   #23
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Смущение Ответ: Ptr и Var : как работает ?

 
Local variable1 : Short Ptr
Local variable2 : Byte Ptr
variable2 = Byte Ptr ( variable )
перевод переменной из одного типа в другой не работает!
как быстро перевести?
(Offline)
 
Ответить с цитированием
Старый 05.05.2008, 00:21   #24
jimon
 
Сообщений: n/a
Ответ: Ptr и Var : как работает ?

drunnik
тебе это зачем вообще ?
 
Ответить с цитированием
Старый 05.05.2008, 00:57   #25
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Ptr и Var : как работает ?

ПсМ
Багратион, а тебя не устроит массив? нада будет хранить только индекс.
(Offline)
 
Ответить с цитированием
Старый 05.05.2008, 01:15   #26
Bagration
Знающий
 
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений
(для 21 пользователей)
Ответ: Ptr и Var : как работает ?

Сообщение от MoKa Посмотреть сообщение
ПсМ
Багратион, а тебя не устроит массив? нада будет хранить только индекс.
Нет, зачем это. С указателями имхо было бы круто. Но как реализовать.
(Offline)
 
Ответить с цитированием
Старый 05.05.2008, 04:11   #27
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Ptr и Var : как работает ?

Индекс на переменную - int вот тебе и указатель.
(Offline)
 
Ответить с цитированием
Старый 05.05.2008, 11:41   #28
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: Ptr и Var : как работает ?

Сообщение от drunnik Посмотреть сообщение
 
Local variable1 : Short Ptr
Local variable2 : Byte Ptr
variable2 = Byte Ptr ( variable )
перевод переменной из одного типа в другой не работает!
как быстро перевести?
в смысле не работает? если ты byte-ом указываешь на short, то он будет разбит на 2 байта var[0] & var[1]
Local variable1 : Short Ptr
Local variable2 : Byte Ptr

Local sh:Short = $ABCD

variable1 = Short Ptr ( Varptr(sh) )

Print Hex(variable1[0])   ' ABCD

variable2 = Byte Ptr( Varptr(sh) )

Print Hex(variable2[0])   ' CD
Print Hex(variable2[1])   ' AB
__________________

Последний раз редактировалось dimanche13, 05.05.2008 в 12:02. Причина: более внятно написал
(Offline)
 
Ответить с цитированием
Старый 08.05.2008, 00:12   #29
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Смущение Ответ: Ptr и Var : как работает ?

Немножко по теме.

Например у меня есть список .
Так-же есть 2 объекта :
Как первый объект поместить в список полностью ,
А на второй поместить только ссылку .

Тоже самое с переменными :
Как копировать тип в другую переменную ,
И как сделать на него только ссылку в другой переменной .

Просто постоянно путаюсь . СоВсЕм уже запутался .
(Offline)
 
Ответить с цитированием
Старый 08.05.2008, 11:20   #30
jimon
 
Сообщений: n/a
Ответ: Ptr и Var : как работает ?

я что-то тоже из темы выпадаю
local somevar:TType = new TType
somevar это же указатель на кусок памяти

local someint% = 1
someint это уже обьект

к примеру :
type TType
field test% = 1
end type

local sint% = 1
local stype:TType = new TType

debuglog "sint"
debuglog sint
i1(sint)
debuglog sint
i2(sint)
debuglog sint

debuglog "stype"
debuglog stype.test
t1(stype)
debuglog stype.test
t2(stype)
debuglog stype.test

function i1(i%)
i = 2
end function

function i2(i% var)
i = 3
end function

function t1(t:ttype)
t.test = 2
end function

function t2(t:ttype var)
t = new ttype 'вот тут мы подмениваем именно указатель !
t.test = 3
end function
в итоге в дебаге должны получить
sint
1
1
3
stype
1
2
3
потому что int копируется в новое значение
а stype это и так указатель

так же мои мысли потверждаются кодом : (файл blitz_object.h)

#ifndef BLITZ_OBJECT_H
#define BLITZ_OBJECT_H

#include "blitz_types.h"

#ifdef __cplusplus
extern "C"{
#endif

#define BBNULL (&bbNullObject)

struct BBClass{
	//extends BBGCPool
	BBClass*	super;
	void		(*free)( BBObject *o );
	
	BBDebugScope*debug_scope;

	int		instance_size;

	void		(*ctor)( BBObject *o );
	void		(*dtor)( BBObject *o );
	
	BBString*	(*ToString)( BBObject *x );
	int		(*Compare)( BBObject *x,BBObject *y );
	BBObject*	(*SendMessage)( BBObject *m,BBObject *s );
	void		(*_reserved1_)();
	void		(*_reserved2_)();
	void		(*_reserved3_)();
	
	void*	vfns[32];
};

struct BBObject{
	//extends BBGCMem
	BBClass*	clas;
	int		refs;
};

extern	BBClass	bbObjectClass;
extern	BBObject bbNullObject;

BBObject*	bbObjectNew( BBClass *t );
void		bbObjectFree( BBObject *o );

void		bbObjectCtor( BBObject *o );
void		bbObjectDtor( BBObject *o );

BBString*	bbObjectToString( BBObject *o );
int		bbObjectCompare( BBObject *x,BBObject *y );
BBObject*	bbObjectSendMessage( BBObject *m,BBObject *s );
void		bbObjectReserved();

BBObject*	bbObjectDowncast( BBObject *o,BBClass *t );

void		bbObjectRetain( BBObject *o );
void		bbObjectRelease( BBObject *o );

void		bbObjectRegisterType( BBClass *clas );
BBClass**	bbObjectRegisteredTypes( int *count );

#ifdef __cplusplus
}
#endif

#endif
все функции работают не с обьектами, а с указателями на них
что собственно и логично

можно конечно получать указатель на переменную,
но я написал на blitzmaxе больше 700 кб кода и мне редко когда такое нужно было

drunnik
в итоге в список не получится поместить обьект Object
полностью, как я понимаю
добавляя Object в список ты и так добавляешь туда его ссылку

если тебе нужны простые указатели типа Int
пользуйся командами : HandleFromObject и прочими

Последний раз редактировалось jimon, 08.05.2008 в 11:27.
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
zheland (08.05.2008)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX почему-то не работает zheland Болтовня 28 12.11.2009 10:51
Так ли работает formGetText? ВалМих Основной форум 1 28.04.2009 12:07
Почему не работает? Doctor Drive Основной форум 2 02.02.2009 02:24
getKeyClicked не работает VM Основной форум 4 14.10.2007 09:05
Что быстрее работает? Inrio Blitz3D 18 18.06.2007 13:13


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


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