forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   addmesh ??? (http://forum.boolean.name/showthread.php?t=17046)

burovalex 22.08.2012 22:12

Ответ: addmesh ???
 
Цитата:

Сообщение от Nerd96 (Сообщение 236956)

Говнокодер.

Это ты мне адресуешь??

Цитата:

Сообщение от Nerd96 (Сообщение 236956)
EntityClass

При удалении класс не меняется! Mesh - Mesh

Цитата:

Сообщение от HolyDel (Сообщение 236958)
ты же сам его удаляешь? своим кодом. ставь у себя где-то флаг.

Я тоже об этом думал, но я думал что есть варианты вроде xEntityExist(ent)...
Я пробывал обнулять меш, но но косяк появляется (2к строк, х*й найдешь!), теперь думаю стоит ли искать косяк? Т.е. нормальный вариант:

Код:

xFreeEntity(ent)
ent=0
if ent=0 then ...

?

HolyDel 22.08.2012 22:21

Ответ: addmesh ???
 
да. нормальный вариант.

вариант с xEntityExist(ent) был бы приемлем если завтра сдавать проект.
но вообще - это не красиво. зачем лишний раз перебирать сценграф? клиентский код должен знать существует ентити или нет. он ее создавал и удалял в конце концов.

Nerd 22.08.2012 23:04

Ответ: addmesh ???
 

Цитата:

Сообщение от burovalex (Сообщение 236973)
Это ты мне адресуешь??

Да. При правильной архитектуре кода битых ссылок не бывает.

burovalex 22.08.2012 23:18

Ответ: addmesh ???
 
Цитата:

Сообщение от Nerd96 (Сообщение 236981)


Да. При правильной архитектуре кода битых ссылок не бывает.

Слушай умник, у тебя чтоли багов не бывает?! Ведешь себя как гамно с задранным носом
Даже виндовс не без багов пишется

burovalex 22.08.2012 23:22

Ответ: addmesh ???
 
HolyDel, объясни плиз, а почему надо все перебирать, есть же конкретная ссылка от ентити?!

HolyDel 22.08.2012 23:27

Ответ: addmesh ???
 
Цитата:

HolyDel, объясни плиз, а почему надо все перебирать, есть же конкретная ссылка от ентити?!
ну так мы же эту ентити возможно удалили? по ссылке мусор.
нам надо перебрать все существующие и проверить есть с таким адресом ссылка или нет. и то это может не работать.
например мы удалили ентити и создали новую.
может так статься - что у новой ентити такой же адрес.
вобщем это очень не по пацански не обнулять ссылку при удалении.

burovalex 31.10.2012 14:34

Ответ: addmesh ???
 
Короче, написал функцию и постоянно пользуюсь, которая сразу обнуляет и проблема исчерпана :)

Function FreeEntityFull(entity)
FreeEntity(entity)
entity=0
End Function

H@NON 31.10.2012 15:44

Ответ: addmesh ???
 
твой вариант бесполезен, потому что в функции ты оперируешь локальными переменными. Вот так будет работать:
Код:

Function FreeEntityF(entity)
    FreeEntity(entity)
    Return 0
End Function

entity = FreeEntityF(entity)


burovalex 01.11.2012 01:03

Ответ: addmesh ???
 
Ты ошибаешься. Оперирую я локальной переменной только в функции, а вот когда ты вместо entity используешь глобальную переменную, соответственно она и используется.
Ну тут даже говорить не о чем. Я в школе проходил как функции работают)...
Без обид. Просто я разражает когда говорят что я не прав, не разобравшись.

Вот сам посуди. У тебя есть:
global a=10

Function oper(i)
i=0
end function

После вызова oper(a) что станет с "ГЛОБАЛЬНОЙ ПЕРЕМЕННОЙ а" ??
Согласись что в моем случае с Entity тоже глобально будет работать!?

H@NON 01.11.2012 01:25

Ответ: addmesh ???
 
Эм, ты как бе неправ, это тебе не basic. Блитц создает внутри функции локальную переменную и уже оперирует с ней, а не с той, которую ты указал. Прежде чем что-то доказывать - проверь.
Код:

Graphics3D 800, 600, 32, 2

Global entity = CreateSphere()
Print "number entity: "+entity
FreeEntityNEPRAVILNO(entity)
Print "after use FreeEntityNEPRAVILNO: "+entity
entity = FreeEntityPRAVILNO(entity)
Print "after use FreeEntityPRAVILNO: "+entity

WaitKey()
End


Function FreeEntityNEPRAVILNO(entity)
        FreeEntity entity
        entity = 0
End Function

Function FreeEntityPRAVILNO(ent)
        ;для теста закоментируем
        ;FreeEntity ent
        Return 0
End Function


burovalex 01.11.2012 14:48

Ответ: addmesh ???
 
Блин, извини меня, H@NON!!
Вообще не прав был!
Просто у меня в проекте было обращение к несуществующему ентити, и почему то после "неправильной" функции косяк пропал, может я чтото еще изменил в коде...
Извини еще раз!

burovalex 01.11.2012 15:11

Ответ: addmesh ???
 
Щас сделал самый простой пример, думал вдруг в ентити такая особенность.
Код:

Global a=10
Print a
ff(a)
Print a
WaitKey()
End

Function ff(ent)
        ent=0
End Function

ВСЕ РАВНО НЕ МЕНЯЕТ. :4to:

Это чушь какая то. :4to:
У меня в проекте пару десятков функций, которые работают с типами, массивами, гл. переменными, ентитями - всё работает. Я практически нигде не использую Return.

Mr_F_ 01.11.2012 15:14

Ответ: addmesh ???
 
Цитата:

Function ff(ent)
ent=0
End Function
у тебя при передаче числовой переменной в функцию, создаётся её локальная копия в ней, инфа 100%. и ты меняешь её а не глобал.

moka 01.11.2012 15:40

Ответ: addmesh ???
 
Код:

Global a=10
Print a
a = ff(a)
Print a
WaitKey()
End

Function ff(ent)
        Return ent + 1
End Function

Так будет ок.
Как Mr_F_ сказал - блиц передаёт не указатель а данное, что делает так сказать копию данного тем самым ты работаешь уже с другой переменной.

H@NON 01.11.2012 17:43

Ответ: addmesh ???
 
В функции при указании у нее переменной(function ss(ent)) внутри создается копия и работа идет уже с ней, а не с оригиналом. Кто-нибудь еще хочет объяснить?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot