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

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

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

Ответ
 
Опции темы
Старый 13.07.2011, 21:47   #1
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Удалить объект

Нужно удалить объект, делаю так:
For Gr = EachIn grass.GrassList
	If movx=Gr.x And movy=Gr.y
		Gr = Null
	End If
Next
Не удаляется. Что я делаю не так? Заранее благодарен.
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 21:53   #2
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

Пробовал так:
	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"
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 21:56   #3
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Удалить объект

так попробуй:
For Gr = EachIn grass.GrassList
If movx=Gr.x And movy=Gr.y
Delete Gr
End If
Next
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 22:01   #4
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

тоже самое
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 22:11   #5
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Удалить объект

я хз как в блитзмаксе, но уменя была похожая проблема в яве
попробуй вместо foreach - for с обновлением размера листа на каждом шаге (если так конечно можно, я хз)))
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 22:18   #6
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

Если я не ошибаюсь For ... EachIn и есть аналог foreach в Java, в общем Blitzmax не понимает foreach
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 22:22   #7
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Удалить объект

ну так я и говорю, попробуй вместо For ... EachIn что то типа (синтаксис не знаю)
For i = 0 to grass.GrassList.size()
If movx=Gr.x And movy=Gr.y
Delete Gr
End If
Next
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 22:28   #8
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Удалить объект

Лол.
Сообщение от xmarat Посмотреть сообщение
Нужно удалить объект, делаю так:
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.
__________________

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Nerd за это полезное сообщение:
NitE (14.07.2011), Randomize (14.07.2011), xmarat (13.07.2011)
Старый 13.07.2011, 22:44   #9
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

Спасибо за ответы. Все получилось.
(Offline)
 
Ответить с цитированием
Старый 13.07.2011, 22:56   #10
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Удалить объект

Извините, конечно, но убейтесь об стену - в BlitzMax нет Delete.
а. не заметил, что тема про блицмакс. ок.
(Offline)
 
Ответить с цитированием
Старый 14.07.2011, 22:19   #11
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

Возникла проблема. Если сделать sortlist, удаляется другой объект вместо нужного. Пробовал с помощью print выяснить имя удаляемого объекта, пишет что grass, а на деле удаляется сам игрок. Если убрать sortlist все нормально, удаляется grass. Но без sortlist никак не обойтись. удаление сделал методом внутри типа Grass, вот так:
Method destroy()
        
obj_list.remove(Self)
        
GCCollect()
    
End Method 
Типы Player и Grass наследуются от типа Obj. В чем может быть проблема?
(Offline)
 
Ответить с цитированием
Старый 14.07.2011, 22:22   #12
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Удалить объект

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

А так ты в нерпавильном месте вызываешь метод удаления видимо.
(Offline)
 
Ответить с цитированием
Старый 14.07.2011, 22:24   #13
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

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

-----------------
Забыл добавить: все объекты в списке obj_list
(Offline)
 
Ответить с цитированием
Старый 14.07.2011, 22:34   #14
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Удалить объект

Ну так а где у тебя метод вызывается ?
И метод удаления вынеси из типа травы. Почему он у тебя там если относится ко всем объектам ?
(Offline)
 
Ответить с цитированием
Старый 14.07.2011, 22:49   #15
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Удалить объект

Вот кратко:
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 
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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