forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Помогите с Type (http://forum.boolean.name/showthread.php?t=13396)

volgeras 14.10.2010 16:15

Ответ: Помогите с 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". Не подскажите в чем возможна проблема? Я уже много вариантов перепробовал, но все равно та же ошибка.

DStalk 14.10.2010 16:43

Ответ: Помогите с Type
 
По моему ты напутал при объявлении типа. Символ # - float(с плавющей точкой), % - boolean(true/false), $ - string(текст).

volgeras 14.10.2010 17:00

Ответ: Помогите с Type
 
Да я там менял, тоже непомогло...

baton4ik 14.10.2010 20:02

Ответ: Помогите с Type
 
Возможно ты раньше юзал другой тип как sh. Если да, то обзови этот, к примеру, she:

she.enemy_ships = New enemy_ships

Arton 14.06.2014 18:43

Ответ: Помогите с Type
 
Вопрос как листать тайп?
Мне нужно, доходя до конца списка автоматически перемещаться в начало и наоборот. Максимум получилось листать назад.

Здесь у меня уже бред, хотя писал вроде логично:
PHP код:

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 это количество объектов в списке

Буду рад если у кого-нибудь есть собственный код реализации, для примера.

dsd 14.06.2014 19:03

Ответ: Помогите с Type
 
Цитата:

Сообщение от Arton (Сообщение 282749)
Вопрос как листать тайп?
Мне нужно, доходя до конца списка автоматически перемещаться в начало и наоборот.

Вот так наверно.
Код:

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


Arton 14.06.2014 19:08

Ответ: Помогите с Type
 
Цитата:

Сообщение от dsd (Сообщение 282752)
Вот так наверно.
Код:

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"

dsd 14.06.2014 19:17

Ответ: Помогите с 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
Вот от того что красным выделено надо управление делать. И хэндл объекта не является его номером.

Nex 14.06.2014 19:55

Ответ: Помогите с Type
 
Наверно будет проще задать каждому "Type" уникальный id-номер и сделать перебор с сравнением id.

Arton 14.06.2014 20:01

Ответ: Помогите с Type
 
Цитата:

Сообщение от dsd (Сообщение 282756)
Вот от того что красным выделено надо управление делать. И хэндл объекта не является его номером.

Всё верно, After'ом и Before'ом листаю список, всё прекрасно работает. Но, когда доходит до выше начала или конца списка получается ошибка, тоже всё правильно.
Значит надо сделать проверку, когда превышает диапазон, так вот эта проверка работает через одно место. Максимум получилось стопорить если листать назад:
PHP код:

If xKeyHit(44) = True Then ;назад "z"

    
Sobj Before Sobj
    
If Handle(Sobj) < 1 Then Sobj.StaticObject First  StaticObject

End 
If 

При "вперёд" вообще ничего не сработало.

И как ты кстати предлагаешь без First и Last перемещаться в начало и конец списка?

Твой пример крутил и так и эток...

Прикрутил так, но это бред и он не работает:
PHP код:

If xKeyHit(44) = True Then ;назад "z"

        
Sobj.StaticObject Last StaticObject
        
        Sobj 
Before(Sobj)

End If 

Переходит с первого объекта (у меня сброс на начало) на второй (вместо третьего!) и останавливается.

Не понимаю :(

dsd 14.06.2014 20:12

Ответ: Помогите с Type
 
PHP код:

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 

Я что то наподобие вот этого в виду имел.

Arton 14.06.2014 20:39

Ответ: Помогите с Type
 
Цитата:

Сообщение от dsd (Сообщение 282764)
PHP код:

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 

Я что то наподобие вот этого в виду имел.

Вот как, я даже не думал так :4to:
Большое спасибо, всё работает.


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

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