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)

xmarat 13.07.2011 21:47

Удалить объект
 
Нужно удалить объект, делаю так:
Код:

For Gr = EachIn grass.GrassList
        If movx=Gr.x And movy=Gr.y
                Gr = Null
        End If
Next

Не удаляется. Что я делаю не так? Заранее благодарен.

xmarat 13.07.2011 21:53

Ответ: Удалить объект
 
Пробовал так:
Код:

        For Gr = EachIn grass.GrassList
                If movx=Gr.x And movy=Gr.y
                        Gr = Null
                        Delete Gr
                End If
        Next

Ругается "Expecting expression but encountered Delete"

IGR 13.07.2011 21:56

Ответ: Удалить объект
 
так попробуй:
For Gr = EachIn grass.GrassList
If movx=Gr.x And movy=Gr.y
Delete Gr
End If
Next

xmarat 13.07.2011 22:01

Ответ: Удалить объект
 
тоже самое

den 13.07.2011 22:11

Ответ: Удалить объект
 
я хз как в блитзмаксе, но уменя была похожая проблема в яве
попробуй вместо foreach - for с обновлением размера листа на каждом шаге (если так конечно можно, я хз)))

xmarat 13.07.2011 22:18

Ответ: Удалить объект
 
Если я не ошибаюсь For ... EachIn и есть аналог foreach в Java, в общем Blitzmax не понимает foreach

den 13.07.2011 22:22

Ответ: Удалить объект
 
ну так я и говорю, попробуй вместо For ... EachIn что то типа (синтаксис не знаю)
Цитата:

For i = 0 to grass.GrassList.size()
If movx=Gr.x And movy=Gr.y
Delete Gr
End If
Next

Nerd 13.07.2011 22:28

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

Сообщение от xmarat (Сообщение 195384)
Нужно удалить объект, делаю так:
Код:

For Gr = EachIn grass.GrassList
        If movx=Gr.x And movy=Gr.y
                Gr = Null
        End If
Next

Не удаляется. Что я делаю не так? Заранее благодарен.

Вот так правильно:
Код:

For Gr = EachIn grass.GrassList
        If movx=Gr.x And movy=Gr.y
                grass.GrassList.Remove(Gr)
        End If
Next
GCollect()

Цитата:

ты переменной присваиваешь значение нуля, а объект никак не трогаешь.
юзай delete))
Извините, конечно, но убейтесь об стену - в BlitzMax нет Delete.

xmarat 13.07.2011 22:44

Ответ: Удалить объект
 
Спасибо за ответы. Все получилось.

Mr_F_ 13.07.2011 22:56

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

Извините, конечно, но убейтесь об стену - в BlitzMax нет Delete.
а. не заметил, что тема про блицмакс. ок.

xmarat 14.07.2011 22:19

Ответ: Удалить объект
 
Возникла проблема. Если сделать sortlist, удаляется другой объект вместо нужного. Пробовал с помощью print выяснить имя удаляемого объекта, пишет что grass, а на деле удаляется сам игрок. Если убрать sortlist все нормально, удаляется grass. Но без sortlist никак не обойтись. удаление сделал методом внутри типа Grass, вот так:
PHP код:

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

Типы Player и Grass наследуются от типа Obj. В чем может быть проблема?

NitE 14.07.2011 22:22

Ответ: Удалить объект
 
Убери игрока из списка травы, например. (Тем-более если он у тебя один, вообще лист ненужен.)

А так ты в нерпавильном месте вызываешь метод удаления видимо.

xmarat 14.07.2011 22:24

Ответ: Удалить объект
 
Суть в том, что мне нужно, чтоб игрок был в списке obj_list, это дает мне возможность управлять глубиной всех объектов. Подробности здесь

-----------------
Забыл добавить: все объекты в списке obj_list

NitE 14.07.2011 22:34

Ответ: Удалить объект
 
Ну так а где у тебя метод вызывается ?
И метод удаления вынеси из типа травы. Почему он у тебя там если относится ко всем объектам ?

xmarat 14.07.2011 22:49

Ответ: Удалить объект
 
Вот кратко:
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 



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

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