|
23.04.2010, 21:08
|
#1
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Input...
Вобщем при создании редактора с маленькой проблемой. Загрузку и сохранение файлов решил сделать через инпут. Нажимаю клавишу сохранить (или загрузить), в определенном месте на экране (напомню, что всё это происходит в 3д режиме) должно выходить сообщение SaveTo (или LoadFrom), после чего вводишь путь файла (загружает нормально и сохраняет тоже) . Но если я после сообщения save map to ничего не напишу , и нажму ентр, то он у меня вылетает с мавом. А как сделать так, что бы после этого save map to ничего не написал и нажал ентр не вылетал он, а выводил сообщение типа: " Enter file name", и дальше продолжаешь работу.
Знаю что это делается через команду RunTimeError, но больше ничего.
ПОдскажите.
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
23.04.2010, 21:13
|
#2
|
Дэвелопер
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений (для 1,985 пользователей)
|
Ответ: Input...
a$=Input("save map to:")
While Len(a$)=0
Print "Неправильно ты сохраняешь"
a$=Input("Куда сохранить то?")
Wend
RuntimeError прерывает работу программы и выводит сообщение. Твои знания не глубоки.
|
(Offline)
|
|
24.04.2010, 17:22
|
#3
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Input...
Да, вот ещё вопрос. Когда я нажимаю несколько на клавишу сохранения , то после первого раза выхода сообщения "save map to:", выходит второй раз.
Например: F6, "save map to:", набираю путь сохранения, нажимаю ентр, сново выходит этоже сообщение "save map to:". То есть сколько раз нажму столько раз впоследствии оно и выйдит. Как это исключить?
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
24.04.2010, 17:39
|
#4
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Input...
Телепат в отпуске, а мои телепатические способности оставляют желать лучшего! Чтоб найти ошибку нужен код.
Скорее всего дело в логической ошибке.
Допустим, есть переменная filesave, которая равна 1 пока идет набор имени файла на сохранение, а после нажатия клавиши <Enter>, ты забываешь ее обнулить.
Или же сохранение идет в каком-нибудь цикле, который начинается выводом фразы "Input save path", а выход из цикла не предусмотрен.
|
(Offline)
|
|
24.04.2010, 18:11
|
#5
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: 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
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
24.04.2010, 18:45
|
#6
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Input...
Здесь все в порядке.
И, пардон, сразу не разобрался. Если несколько раз нажать кнопку, естественно, получится несколько событий KeyHit(64). Я думаю этого можно избегнуть если в конце блока сохранения поставить команду FlushKeys(). Эта команда чистит все "события" получаемые от клавиатуры.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо FireOwl за это полезное сообщение:
|
|
25.04.2010, 12:17
|
#7
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: 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 и т.д) то он вылетает.
Так вот как сделать что бы он у меня не вылетал, а только предупреждал что такой текстуты нет.
__________________
Самый первый и самый великий программист - это Бог.
Последний раз редактировалось SBJoker, 25.04.2010 в 12:32.
Причина: волшебный тег code
|
(Offline)
|
|
25.04.2010, 17:20
|
#8
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Input...
Я знаю , что эту ахинею никто не читал.
Вобщем покапался я и нашёл такую команду FileType.
Т.е что мне нужно... Мне нужно что бы если фаил с текстурой есть, то загружать, если нет его , то вывести сообщение об отсутствии файла, и дальше продолжать работу.
Вот это надо поставить в этом коде:
Function UpdateBlock()
For b.Block=Each Block
If KeyHit(1 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
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
26.04.2010, 01:06
|
#9
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Input...
Насколько я понял твою проблему, все куда проще.
Если загрузить несуществующую текстуру, значение переменной в которую происходила загрузка останется равным нулю.
То есть надо просто проверить, как-нибудь вроде:
alfa=LoadTexture("ahineja.bmp")
if alfa=0 then
RuntimeError("Нет такого файла!!!")
else
EntityTexture mesh,alfa
endif
|
(Offline)
|
|
26.04.2010, 15:41
|
#10
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: 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
Выполняет нормально, то что я хотел. Но теперь как дальше продолжить работу, если это сообщение остаётся только на чёрном фоне.
Т.Е. это должно быть так : если такой текстуры нет , то вывести на экран об отсутствии текстуры, затекстурировать модель существующей тестурой, и чере несколько секунд убрать сообщение об отсутствии текстуры, и продолжить работу.
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
26.04.2010, 16:19
|
#11
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: 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
з.ы. данная функция выводит определенное колличество сообщение (строк).
|
(Offline)
|
|
26.04.2010, 16:36
|
#12
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Input...
Да, и ещё , почему при текстурации объектов какие текстуры я им наложил такие и на них, а при загргрузке этой же карты текстуры на всех объектах одинаковы?
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
26.04.2010, 17:23
|
#13
|
Мастер
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений (для 3,006 пользователей)
|
Ответ: Input...
Вот это мягко говоря плохо.
Insert m Before First TText
Сортировать строки нужно ручным способом. Хотя если тебе нужны провисы в игре перед каждым сообщением то сойдет.
ЗЫ. Могу свою дать консолько, потыкать.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо EvilChaotic за это полезное сообщение:
|
|
27.04.2010, 08:17
|
#14
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Input...
ЗЫ. Могу свою дать консолько, потыкать.
|
Лучше объяснить например в аське некоторые вещи или лучше всего напиши пару статей на темы которые очень хорошо знаешь что бы у людей возникало меньше вопросов.
|
(Offline)
|
|
27.04.2010, 19:09
|
#15
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Input...
Эээ , лучше подскажите как кнопками правильно менять текстуры на объектах исходя из этого кода ...
Буду невероятно признателен
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:52.
|