forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Input... (http://forum.boolean.name/showthread.php?t=12412)

Ganociy 23.04.2010 21:08

Input...
 
Вобщем при создании редактора с маленькой проблемой. Загрузку и сохранение файлов решил сделать через инпут. Нажимаю клавишу сохранить (или загрузить), в определенном месте на экране (напомню, что всё это происходит в 3д режиме) должно выходить сообщение SaveTo (или LoadFrom), после чего вводишь путь файла (загружает нормально и сохраняет тоже) . Но если я после сообщения save map to ничего не напишу , и нажму ентр, то он у меня вылетает с мавом. А как сделать так, что бы после этого save map to ничего не написал и нажал ентр не вылетал он, а выводил сообщение типа: " Enter file name", и дальше продолжаешь работу.
Знаю что это делается через команду RunTimeError, но больше ничего.
ПОдскажите.:)

Reks888 23.04.2010 21:13

Ответ: Input...
 
a$=Input("save map to:")
While Len(a$)=0
Print "Неправильно ты сохраняешь"
a$=Input("Куда сохранить то?")
Wend

RuntimeError прерывает работу программы и выводит сообщение. Твои знания не глубоки.

Ganociy 24.04.2010 17:22

Ответ: Input...
 
Да, вот ещё вопрос. Когда я нажимаю несколько на клавишу сохранения , то после первого раза выхода сообщения "save map to:", выходит второй раз.
Например: F6, "save map to:", набираю путь сохранения, нажимаю ентр, сново выходит этоже сообщение "save map to:". То есть сколько раз нажму столько раз впоследствии оно и выйдит. Как это исключить?

FireOwl 24.04.2010 17:39

Ответ: Input...
 
Телепат в отпуске, а мои телепатические способности оставляют желать лучшего! Чтоб найти ошибку нужен код.
Скорее всего дело в логической ошибке.
Допустим, есть переменная filesave, которая равна 1 пока идет набор имени файла на сохранение, а после нажатия клавиши <Enter>, ты забываешь ее обнулить.
Или же сохранение идет в каком-нибудь цикле, который начинается выводом фразы "Input save path", а выход из цикла не предусмотрен.

Ganociy 24.04.2010 18:11

Ответ: Input...
 
If KeyHit(64) And ts=1 Then
SetFont fontA
Sd$=Input$(" Save map to: ")
While Len(sd$)=0
Locate 400, 100
Print "Enter File Name"
Locate 100, 200
sd$=Input(" Save map to: ")
Cls
Wend
WriteMap(Sd$)
EndIf

FireOwl 24.04.2010 18:45

Ответ: Input...
 
Здесь все в порядке.
И, пардон, сразу не разобрался. Если несколько раз нажать кнопку, естественно, получится несколько событий KeyHit(64). Я думаю этого можно избегнуть если в конце блока сохранения поставить команду FlushKeys(). Эта команда чистит все "события" получаемые от клавиатуры.

Ganociy 25.04.2010 12:17

Ответ: Input...
 
вот ещё один вопрос. ЗАнялся процессом наложением текстур я.
вот кодик
Код:

Function UpdateBlock()
For b.Block=Each Block

If KeyHit(18) Then
tn=tn+1
EndIf

If KeyHit(16) Then
tn=tn-1
EndIf

If b\picked=1 Then
b\texture=LoadTexture (tn+".jpg")
EntityTexture b\model,b\texture
EntityColor b\model,255,0,0
EndIf

If b\picked=0 Then
EntityColor b\model,255,255,255
EndIf
Next
End Function

в главном цикле

If MouseHit (1) Then
pick=CameraPick(cam,MouseX(),MouseY())
If pick=terrain
CreateBlock(PickedX(),PickedY()+1,PickedZ(),0,0,0,1,1,1)
EndIf 

For c.Block=Each Block
If pick=c\model Then
c\picked=1-c\picked
EndIf
Next
EndIf

всё происходит нормально с наложение текстур. Ну мне по крайней мере нравятся. Но как всегда есть проблема. При смене текстур(If
Код:

KeyHit(18) Then
tn=tn+1
EndIf

If KeyHit(16) Then
tn=tn-1
EndIf

если текстуры такой нету(b\texture=LoadTexture (tn+".jpg")
EntityTexture b\model,b\texture) программа вылетает. То есть:
создаю кубик, пикаю на него, жму клавиши выборо текстур, всё нормально, (у меня 3 текстуры ) если в пикнутом состоянии объект находится, и при переключении диапозон текстур выходит за 3 или за 1(т.е. 0,-1 и т.д) то он вылетает.
Так вот как сделать что бы он у меня не вылетал, а только предупреждал что такой текстуты нет.

Ganociy 25.04.2010 17:20

Ответ: Input...
 
Я знаю , что эту ахинею никто не читал.
Вобщем покапался я и нашёл такую команду FileType.
Т.е что мне нужно... Мне нужно что бы если фаил с текстурой есть, то загружать, если нет его , то вывести сообщение об отсутствии файла, и дальше продолжать работу.
Вот это надо поставить в этом коде:
Function UpdateBlock()
For b.Block=Each Block

If KeyHit(18) Then
tn=tn+1
EndIf

If KeyHit(16) Then
tn=tn-1
EndIf

If b\picked=1 Then
b\texture=LoadTexture (tn+".jpg")
EntityTexture b\model,b\texture
EntityColor b\model,255,0,0
EndIf

If b\picked=0 Then
EntityColor b\model,255,255,255
EndIf
Next
End Function

FireOwl 26.04.2010 01:06

Ответ: Input...
 
Насколько я понял твою проблему, все куда проще.
Если загрузить несуществующую текстуру, значение переменной в которую происходила загрузка останется равным нулю.
То есть надо просто проверить, как-нибудь вроде:
Код:

alfa=LoadTexture("ahineja.bmp")
if alfa=0 then
  RuntimeError("Нет такого файла!!!")
else
  EntityTexture mesh,alfa
endif


Ganociy 26.04.2010 15:41

Ответ: Input...
 
Нет, вы не поняли. Вот код

Type Block
Field Model
Field TP$
...
End Type

Function UpdateBlock()
For b.Block=Each Block

If KeyHit(1 Then
tn=tn+1
EndIf

If KeyHit(16) Then
tn=tn-1
EndIf

TP$=tn+".jpg"

If b\picked=1 Then
b\texture=LoadTexture (TP$)
EntityTexture b\model,b\texture
EntityColor b\model,255,0,0
EndIf

If b\picked=0 Then
EntityColor b\model,255,255,255
EndIf
Next
End Function

в главном цикле

If MouseHit (1) Then
pick=CameraPick(cam,MouseX(),MouseY())
If pick=terrain
CreateBlock(PickedX(),PickedY()+1,PickedZ(),0,0,0, 1,1,1)
EndIf

For c.Block=Each Block
If pick=c\model Then
c\picked=1-c\picked
EndIf
Next
EndIf

Посмотрите его внимательней...
Я впринципе реализовал возможность того, если текстуры такой нет то показать сообщение НЕТ ТЕКСТУРЫ.
Сделал я это так в функции (UpdateBlock) :
While FileType(TP$)=0 Then
Print "No texture!"
Wend

Выполняет нормально, то что я хотел. Но теперь как дальше продолжить работу, если это сообщение остаётся только на чёрном фоне.
Т.Е. это должно быть так : если такой текстуры нет , то вывести на экран об отсутствии текстуры, затекстурировать модель существующей тестурой, и чере несколько секунд убрать сообщение об отсутствии текстуры, и продолжить работу.

Nex 26.04.2010 16:19

Ответ: Input...
 
Вот пример. Думаю дальше разберешься. Если не разберешься, то таймер в помощь...
Код:

Type TText
        Field msg$
        Field amount
End Type

Function iMessage (msg$)
        m.TText = New TText
                m\msg$ = msg$
                Insert m Before First TText
End Function

Function RenderMessage (x,y)
                y = y
                y = y +FontHeight()*2
                amount = 0
        For m.TText = Each TText
                If amount<36 Then
                        Text_ (x,y,m\msg$,0,0,0)
                                y = y+FontHeight()+5
                                amount = amount+1
                        Else
                                Delete m
                EndIf       
        Next
End Function

з.ы. данная функция выводит определенное колличество сообщение (строк).

Ganociy 26.04.2010 16:36

Ответ: Input...
 
Да, и ещё , почему при текстурации объектов какие текстуры я им наложил такие и на них, а при загргрузке этой же карты текстуры на всех объектах одинаковы?

EvilChaotic 26.04.2010 17:23

Ответ: Input...
 
Вот это мягко говоря плохо.
Код:

                Insert m Before First TText
Сортировать строки нужно ручным способом. Хотя если тебе нужны провисы в игре перед каждым сообщением то сойдет.

ЗЫ. Могу свою дать консолько, потыкать.


Nex 27.04.2010 08:17

Ответ: Input...
 
Цитата:

ЗЫ. Могу свою дать консолько, потыкать.
Лучше объяснить например в аське некоторые вещи или лучше всего напиши пару статей на темы которые очень хорошо знаешь что бы у людей возникало меньше вопросов. :-D

Ganociy 27.04.2010 19:09

Ответ: Input...
 
Эээ , лучше подскажите как кнопками правильно менять текстуры на объектах исходя из этого кода ...
Буду невероятно признателен


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

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