forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Удалить объект (http://forum.boolean.name/showthread.php?t=15114)

NitE 14.07.2011 22:56

Ответ: Удалить объект
 
Ну так проблем не видно - они где-то в другом месте.
1. Непонятно - почему у тебя все методы раскиданы через зад ? Замени абстрактные методы в типе obj на реальные - т.е. перемести их.
2. Убери GCCollect - оно тебе не надо.
3. В переменную o_type разумнее было-бы вписывать номер соотвествующий какому-то типу объектов (например 1 - дерево, 2 - игрок.) Это многократно ускорит проверку и создание.

xmarat 14.07.2011 23:14

Ответ: Удалить объект
 
Я новичок в BlitzMax, поэтому возможно что то делаю не так. Пункты 2 и 3 сделал. По поводу первого пункта можно поточнее, куда их переместить?

xmarat 15.07.2011 02:46

Ответ: Удалить объект
 
В общем решил проблему полностью переписав игру. Теперь каждый тип имеет свой собственный лист.

NitE 15.07.2011 08:43

Ответ: Удалить объект
 
Вообщем вот что было у тебя.
PHP код:

Type obj
    
    Field o_type
:String

    
...

    
Method Update() Abstract
    
    
Method Destroy() Abstract
End Type

Type Grass 
Extends obj

    
Function Create()
        
Local NewGrass:Grass = New Grass
        NewGrass
.o_type="Grass"
    
End Function

    ...
    
    
Method destroy()
        
obj_list.remove(Self)
        
GCCollect()
    
End Method

    
...

End Type

Type Player 
Extends obj

    
...

    
Method Update()
        ...
        For 
EachIn obj_list
            
...
            If (
A.o_type="Grass"Then A.destroy()
            ...
        
Next
        
...
    
End Method

    
...

End Type 

А вот так должно быть.
PHP код:

Type obj
    
    Field o_type
:String

    
...

    
Method Update()
        ...
        For 
EachIn obj_list
            
...
            If (
A.o_type="Grass"Then A.destroy()
            ...
        
Next
        
...
    
End Method
    
    Method destroy
()
        
obj_list.remove(Self)
        
GCCollect()
    
End Method
End Type

Type Grass 
Extends obj

    
Function Create()
        
Local NewGrass:Grass = New Grass
        NewGrass
.o_type="Grass"
    
End Function

    ...
    


    ...

End Type

Type Player 
Extends obj

    
...



    ...

End Type 


Жека 15.07.2011 11:32

Ответ: Удалить объект
 
Цитата:

Сообщение от xmarat (Сообщение 195544)
В общем решил проблему полностью переписав игру. Теперь каждый тип имеет свой собственный лист.

Радикальные меры:) Исходник старый есть с багом? Охота посмотреть что не так было. Если есть, то выложи.


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

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