|
2D-программирование Вопросы, касающиеся двумерного программирования |
14.10.2010, 16:15
|
#16
|
AnyKey`щик
Регистрация: 10.09.2010
Сообщений: 17
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите с Type
Вот возник еще вопрос о типе. Есть такой тип:
Type enemy_ships
Field id
Field alpha#
Field rotate%
Field long$
Field x1%,z1%
Field x2%,z2%
Field x3%,z3%
Field x4%,z4%
End Type
И такой код:
While Not Eof(stream_in)
s_l = ReadLine(stream_in)
s_x = ReadLine(stream_in)
s_z = ReadLine(stream_in)
s_r = ReadLine(stream_in)
sh.enemy_ships = New enemy_ships
sh\alpha = "1"
sh\rotate = s_r
sh\long = s_l
If s_l = 1 Then
sh\id = LoadMesh("3d_1.3ds")
ScaleEntity sh\id,0.35,0.3,0.2
EntityAlpha sh\id,1
sh\x1 = s_x
sh\z1 = s_z
sh\x2 = 0
sh\z2 = 0
sh\x3 = 0
sh\z3 = 0
sh\x4 = 0
sh\z4 = 0
;Тут еще несколько похожих проверок
EndIf
Wend
Когда пытаюсь запустить программу, то на строчке, выделенной красным, она отказывается запускаться, говорит: "Variable type mismatch". Не подскажите в чем возможна проблема? Я уже много вариантов перепробовал, но все равно та же ошибка.
|
(Offline)
|
|
14.10.2010, 16:43
|
#17
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Помогите с Type
По моему ты напутал при объявлении типа. Символ # - float(с плавющей точкой), % - boolean(true/false), $ - string(текст).
|
(Offline)
|
|
14.10.2010, 17:00
|
#18
|
AnyKey`щик
Регистрация: 10.09.2010
Сообщений: 17
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите с Type
Да я там менял, тоже непомогло...
|
(Offline)
|
|
14.10.2010, 20:02
|
#19
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,700
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Помогите с Type
Возможно ты раньше юзал другой тип как sh. Если да, то обзови этот, к примеру, she:
she.enemy_ships = New enemy_ships
__________________
kali surgeon
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.06.2014, 18:43
|
#20
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Помогите с Type
Вопрос как листать тайп?
Мне нужно, доходя до конца списка автоматически перемещаться в начало и наоборот. Максимум получилось листать назад.
Здесь у меня уже бред, хотя писал вроде логично:
If xKeyHit(44) = True Then ;назад "z"
Sobj = Before Sobj If Handle(Sobj) <= 0 Then Sobj.StaticObject = Last StaticObject
End If
If xKeyHit(45) = True Then ;вперёд "x"
Sobj = After Sobj If Handle(Sobj) > numbstatic Then Sobj.StaticObject = First StaticObject
End If
numbstatic это количество объектов в списке
Буду рад если у кого-нибудь есть собственный код реализации, для примера.
|
(Offline)
|
|
14.06.2014, 19:03
|
#21
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Помогите с Type
Сообщение от Arton
Вопрос как листать тайп?
Мне нужно, доходя до конца списка автоматически перемещаться в начало и наоборот.
|
Вот так наверно.
If xKeyHit(44) = True Then ;назад "z"
If Handle(Sobj) = First StaticObject Then Sobj.StaticObject = Last StaticObject
Else Sobj = Before Sobj EndIf
End If
If xKeyHit(45) = True Then ;вперёд "x"
If Handle(Sobj) = Last StaticObject Then Sobj.StaticObject = First StaticObject
Else Sobj = After Sobj EndIf
End If
|
(Offline)
|
|
14.06.2014, 19:08
|
#22
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Помогите с Type
Сообщение от dsd
Вот так наверно.
If xKeyHit(44) = True Then ;назад "z"
If Handle(Sobj) = First StaticObject Then Sobj.StaticObject = Last StaticObject
Sobj = Before Sobj
End If
If xKeyHit(45) = True Then ;вперёд "x"
If Handle(Sobj) = Last StaticObject Then Sobj.StaticObject = First StaticObject
Sobj = After Sobj
End If
|
Так нельзя, First и Last только перемещают.
"Error: Illegal type conversion"
|
(Offline)
|
|
14.06.2014, 19:17
|
#23
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Помогите с Type
Пример:
mine.MyType=First MyType ;mine=first object in the type list
mine=After( mine ) ;mine=second object
mine=After( mine ) ;mine=third object
mine=Before( mine ) ;mine=second object
mine=Before( mine ) ;mine=first again!
'After' и 'Before' возвращают 'Null' если тип пуст или объектов дальше нет. Пример:
mine.MyType=Last MyType ;mine=last object
mine=After( mine ) ;object after last does not exist!
Так же можно вставлять опретором Insert в любое место списка. Пример:
mine1.MyType=New MyType
mine2.MyType=New MyType
Insert mine2 Before mine1
Прмер как вставить новый эллемент в начало списка:
Insert mine Before First MyType
Специальная форма For...Next позволяет вам легко проверить каждый эллемент типа в листе. Пример:
For mine.MyType=Each MyType
Next
Наконец, опертор 'Delete Each' Позволит вам удалить все эеллементы из листа типа. Пример:
Delete Each MyType
|
Вот от того что красным выделено надо управление делать. И хэндл объекта не является его номером.
|
(Offline)
|
|
14.06.2014, 19:55
|
#24
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Помогите с Type
Наверно будет проще задать каждому "Type" уникальный id-номер и сделать перебор с сравнением id.
|
(Offline)
|
|
14.06.2014, 20:01
|
#25
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Помогите с Type
Сообщение от dsd
Вот от того что красным выделено надо управление делать. И хэндл объекта не является его номером.
|
Всё верно, After'ом и Before'ом листаю список, всё прекрасно работает. Но, когда доходит до выше начала или конца списка получается ошибка, тоже всё правильно.
Значит надо сделать проверку, когда превышает диапазон, так вот эта проверка работает через одно место. Максимум получилось стопорить если листать назад:
If xKeyHit(44) = True Then ;назад "z"
Sobj = Before Sobj If Handle(Sobj) < 1 Then Sobj.StaticObject = First StaticObject
End If
При "вперёд" вообще ничего не сработало.
И как ты кстати предлагаешь без First и Last перемещаться в начало и конец списка?
Твой пример крутил и так и эток...
Прикрутил так, но это бред и он не работает:
If xKeyHit(44) = True Then ;назад "z"
Sobj.StaticObject = Last StaticObject Sobj = Before(Sobj)
End If
Переходит с первого объекта (у меня сброс на начало) на второй (вместо третьего!) и останавливается.
Не понимаю
|
(Offline)
|
|
14.06.2014, 20:12
|
#26
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Помогите с Type
If xKeyHit(44) = True Then ;назад "z"
Sobj = Before Sobj
If Sobj = Null Then Sobj.StaticObject = Last StaticObject
End If
If xKeyHit(45) = True Then ;вперёд "x"
Sobj = After Sobj If Sobj = Null Then Sobj.StaticObject = First StaticObject
End If
Я что то наподобие вот этого в виду имел.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
|
|
14.06.2014, 20:39
|
#27
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Помогите с Type
Сообщение от dsd
If xKeyHit(44) = True Then ;назад "z" Sobj = Before Sobj If Sobj = Null Then Sobj.StaticObject = Last StaticObject End If If xKeyHit(45) = True Then ;вперёд "x" Sobj = After Sobj If Sobj = Null Then Sobj.StaticObject = First StaticObject End If
Я что то наподобие вот этого в виду имел.
|
Вот как, я даже не думал так
Большое спасибо, всё работает.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:57.
|