forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Помогите с LoadAnimImage (http://forum.boolean.name/showthread.php?t=15883)

Okay 21.11.2011 20:24

Помогите с LoadAnimImage
 
Помогите с LoadAnimImage.
Допустим у меня есть такой рисунок

Покажите схематически, как указывать координаты. Откуда начинать их указывать.

Nerd 21.11.2011 20:53

Ответ: Помогите с LoadAnimImage
 

Okay 21.11.2011 20:55

Ответ: Помогите с LoadAnimImage
 
:ok: Тут адекватные люди присутствуют?

mauNgerS 21.11.2011 21:04

Ответ: Помогите с LoadAnimImage
 
Все правильно.
Еще обрати внимание на DrawImage image, x,y [,frame]
А именно [,frame]

Okay 21.11.2011 21:08

Ответ: Помогите с LoadAnimImage
 
Вот там где: ' x,y '
Мне нужно указать координаты фрейма. Я не пойму, откуда их начать указывать. И как вообще найти эти координаты

Arles 21.11.2011 21:10

Ответ: Помогите с LoadAnimImage
 
да здесь все адекватные, кроме некоторых топикстартеров))

LoadAnimImage (filename,width,height,first,count)
Параметры
filename = путь к файлу с графикой.
width = ширина в пикселях каждого кадра анимации.
height = высота в пикселях каждого кадра анимации.
first = номер, с которого начать нумерацию кадров (обычно 0)
count = сколько кадров анимации вы хотите загрузить


Что за проблемы можно тут встретить, не понимаю? Передаешь функции разрешение одного из кадров, а все разбиение на анимационную последовательность она делает сама!

Nerd 21.11.2011 21:11

Ответ: Помогите с LoadAnimImage
 
Okay, тогда для чего по твоему параметр frame?

mauNgerS 21.11.2011 21:14

Ответ: Помогите с LoadAnimImage
 
LoadAnimImage (filename,width,height,first,count)

filename = путь к файлу с графикой.
width = ширина в пикселях каждого кадра анимации.
height = высота в пикселях каждого кадра анимации.
first = номер, с которого начать нумерацию кадров (обычно 0)
count = сколько кадров анимации вы хотите загрузить

Анимированная картинка содержит 2 или более кадров, расположенных внутри одной картинки по порядку следования. Там нет промежутков между кадрами, и каждый кадр должен иметь общую со всеми кадрами высоту и ширину. Будучи загруженными, кадры будут пронумерованны в порядке слева направо и сверху вниз, начиная с верхнего левого угла.

При рисовании с помощью команды DrawImage, Вы должны указать номер кадра с помощью параметра frame.

Чтобы действительно анимировать картинку, Вы должны организовать смену кадров (как листание книги, мультик, или другое видео) достаточно быструю, чтобы создать иллюзию движения.

Okay 21.11.2011 21:22

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

Сообщение от mauNgerS (Сообщение 210510)
LoadAnimImage (filename,width,height,first,count)

filename = путь к файлу с графикой.
width = ширина в пикселях каждого кадра анимации.
height = высота в пикселях каждого кадра анимации.
first = номер, с которого начать нумерацию кадров (обычно 0)
count = сколько кадров анимации вы хотите загрузить

Анимированная картинка содержит 2 или более кадров, расположенных внутри одной картинки по порядку следования. Там нет промежутков между кадрами, и каждый кадр должен иметь общую со всеми кадрами высоту и ширину. Будучи загруженными, кадры будут пронумерованны в порядке слева направо и сверху вниз, начиная с верхнего левого угла.

При рисовании с помощью команды DrawImage, Вы должны указать номер кадра с помощью параметра frame.

Чтобы действительно анимировать картинку, Вы должны организовать смену кадров (как листание книги, мультик, или другое видео) достаточно быструю, чтобы создать иллюзию движения.

Лучший ответ! В основном понятно. А вот допустим у меня между кадрами линия. Что с ней делать? или как он поймет, что её не нужно грузить?

Okay 21.11.2011 21:24

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

Сообщение от Arles (Сообщение 210507)
да здесь все адекватные, кроме некоторых топикстартеров))

LoadAnimImage (filename,width,height,first,count)
Параметры
filename = путь к файлу с графикой.
width = ширина в пикселях каждого кадра анимации.
height = высота в пикселях каждого кадра анимации.
first = номер, с которого начать нумерацию кадров (обычно 0)
count = сколько кадров анимации вы хотите загрузить


Что за проблемы можно тут встретить, не понимаю? Передаешь функции разрешение одного из кадров, а все разбиение на анимационную последовательность она делает сама!

То что написано - написано в HELP'e. это я уже до этого знал.

Nerd 21.11.2011 21:31

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

Лучший ответ! В основном понятно.
Цитата:

То что написано - написано в HELP'e. это я уже до этого знал.
Оксюморон же.
Цитата:

А вот допустим у меня между кадрами линия. Что с ней делать? или как он поймет, что её не нужно грузить?
Ты сам должен это решить в рисунке.

mauNgerS 21.11.2011 21:34

Ответ: Помогите с LoadAnimImage
 
Ну это смотря где линия.
Можно попробовать DrawImageRect
А проще - Photoshop.


Цитата:

То что написано - написано в HELP'e.
У меня видать особый мегокрутой хелп :-D

Okay 21.11.2011 21:34

Ответ: Помогите с LoadAnimImage
 
Вот посмотрите.
Думаю тут все понятно.

Nerd 21.11.2011 21:37

Ответ: Помогите с LoadAnimImage
 
Чёрных линий никогда не оставляют. И на волшебство со стороны движка никогда не надейся.

Okay 21.11.2011 21:39

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

Сообщение от Nerd96 (Сообщение 210522)
Чёрных линий никогда не оставляют. И на волшебство со стороны движка никогда не надейся.

Линию я сделал для вас. Чтобы вам легче мне было помочь.

mauNgerS 21.11.2011 21:39

Ответ: Помогите с LoadAnimImage
 
В фотошопе слепи картинку без всяких разделяющих линий.

Okay 21.11.2011 21:57

Ответ: Помогите с LoadAnimImage
 
Так. Хорошо. Всем спасибо)

Okay 21.11.2011 22:10

Ответ: Помогите с LoadAnimImage
 
Ах да. Еще вопрос. Вообщем есть изображение. Им можно управлять стрелочками.
Суть вопроса: Какую функцию использовать, чтобы когда нажимаю допустим кнопку. старое изображение удалялось, новое появлялось. Далее когда отпускаю кнопку, появляется опять старое.

St_AnGer 21.11.2011 22:15

Ответ: Помогите с LoadAnimImage
 
рисовать нужное изображение при нажатии клавиши, а при НЕ нажатии - рисовать другое. Что то вроде такого

Код:

If KeyDown(27)
    DrawImage img1, 10, 10
Else
    DrawImage img2, 10, 10
End If


Okay 21.11.2011 22:24

Ответ: Помогите с LoadAnimImage
 
Код:

While Not KeyDown(1)


Cls

DrawImage mario,xm,ym
DrawImage pein,x,y
DrawImage cur,MouseX(),MouseY()


If KeyDown(200) Then
 y = y - 1
EndIf

If KeyDown(208) Then
 y = y + 1
EndIf

If KeyDown(203) Then

 x = x - 1
EndIf

If KeyDown(205) Then
 x = x + 1
EndIf

В действиях пробовал вставлять freeimage. Выдает ошибку.

St_AnGer 21.11.2011 22:28

Ответ: Помогите с LoadAnimImage
 
FreeImage выдаёт ошибку потому что ты удаляешь изображение в цикле, т.е. не один раз. И зачем удалять? Рисуй просто как я сказал (когда надо одну, а когда ненадо - на её же месте другую).

Okay 21.11.2011 22:32

Ответ: Помогите с LoadAnimImage
 
Смотри. Изображение уже нарисовано. То есть если я нажму кнопку, он нарисует еще одно изображение.

Okay 21.11.2011 22:33

Ответ: Помогите с LoadAnimImage
 

Okay 21.11.2011 22:35

Ответ: Помогите с LoadAnimImage
 
А что если сделать так же по кадрам? То есть запускать определенный кадр в то или инное действие? если я нажму кнопку, он будет мне показывать другой кадр. Можно ли так?

St_AnGer 21.11.2011 22:35

Ответ: Помогите с LoadAnimImage
 
эмм... Я не понял сразу о чём ты. Делай CLS вначале цикла. Должно помочь.

упд. Моя невнимательность, клс есть.

Okay 21.11.2011 22:36

Ответ: Помогите с LoadAnimImage
 
Код:

Graphics 800,600
SetBuffer BackBuffer()


AppTitle "The Big Fighter"

Global x = 300
Global y = 300
Global xm = 400
Global ym = 400
Global frmSparks, tmrSparks
Global cadr = 0

Global pein = LoadImage("pein.bmp")
Global mario = LoadImage("mario.bmp")
Global cur = LoadImage("cursor.bmp")
Global pein_run = LoadAnimImage("pein_run.bmp",65,65,cadr,3)

MaskImage mario,0,0,0
MaskImage pein,0,0,0


While Not KeyDown(1)


Cls

DrawImage mario,xm,ym
DrawImage pein,x,y
DrawImage cur,MouseX(),MouseY()


If KeyDown(200) Then
 y = y - 1
EndIf

If KeyDown(208) Then
 y = y + 1
EndIf

If KeyDown(203) Then

 x = x - 1
EndIf

If KeyDown(205) Then
 x = x + 1
EndIf


HidePointer


Flip
Wend

End


Okay 21.11.2011 22:45

Ответ: Помогите с LoadAnimImage
 
Ok. Попробую с кадрами поработать чуть чуть. Так если что не получится, напишу :)

St_AnGer 21.11.2011 23:21

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

Сообщение от Okay (Сообщение 210540)
Смотри. Изображение уже нарисовано. То есть если я нажму кнопку, он нарисует еще одно изображение.

при том коде что ты написал, если ты нажмёшь кнопку 200 (вверх) - он не нарисует новое, а сдвинет твоё изображение на экране вверх (соответственно уменьшив координату Y). С другими кнопками соответственно их условию работы. Не пойму сути проблемы, твой код рабочий (и работает как надо вроде бы).

По LoadAnimImage - тут вроде всё легко.
1) Грузишь последовательность кадров:
Код:

pein_run = LoadAnimImage("pein_run.bmp", 65, 65, [номер первого кадра], [флаги изображения])
2) вводишь какую то переменную считающую кадры изображения (например frame% ) и переменную считающую интервал смены кадра (допустим frameTime% );
3) в цикле отображаешь твоё изображение с помощью DrawImage (допустим кадров было 3):

Код:

If MilliSecs() > frameTime + 100 Then
    frameTime = MilliSecs()
    frame = ( frame + 1 ) Mod 3; 3 - количество кадров
End If
DrawImage pein_run, x, y, frame

Всё должно прекрасно работать. Помоему это есть в базовых примерах блица. Сори если код немного не верный будет - с телефона пишу уже засыпая.

Okay 22.11.2011 00:01

Ответ: Помогите с LoadAnimImage
 
Сделал через условие IF. Только теперь не знаю как потом возвратить функцию обратно в 0.

Okay 22.11.2011 00:32

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

Сообщение от Okay (Сообщение 210564)
Сделал через условие IF. Только теперь не знаю как потом возвратить функцию обратно в 0.

Пацаны вообще ребята!
Получилось через else Good nice ^_^ :)
Выражаю огромное спасибо всем, кто помог мне в освоение анимации и не много логики)

Okay 22.11.2011 01:01

Ответ: Помогите с LoadAnimImage
 
Прошу прощения. Но не пойму в чем ошибка. пол часа сидел, думал исправлял. Не получается. Походу это никогда не закончится :D
Код:

Graphics 800,600
SetBuffer BackBuffer()


AppTitle "The Big Fighter"

Global x = 300
Global y = 300
Global xm = 400
Global ym = 400
Global frame = 0
Global framel = 0
Global frameTime
Global frametimel
Global nado = 0

Global pein = LoadImage("pein.bmp")
Global peinl = LoadImage("peinl.bmp")
Global mario = LoadImage("mario.bmp")
Global cur = LoadImage("cursor.bmp")
Global pein_run = LoadAnimImage("pein_run.bmp",65,85,frame,3)
Global pein_runl = LoadAnimImage("pein_runl.bmp",65,85,framel,3)

MaskImage mario,0,0,0
MaskImage pein,0,0,0
MaskImage peinl,0,0,0
MaskImage pein_run,0,0,0
MaskImage pein_runl,0,0,0

While Not KeyDown(1)


Cls


DrawImage mario,xm,ym



If nado = 0 Then

DrawImage pein,x,y

EndIf

If nado = 10 Then

DrawImage peinl,x,y

EndIf



DrawImage cur,MouseX(),MouseY()


If KeyDown(200) Then
 y = y - 1
EndIf

If KeyDown(208) Then
 y = y + 1
EndIf



If KeyDown(203) Then
nado = 3 ; 3 - бежать
 If MilliSecs() > frameTime + 100 Then
    frameTime = MilliSecs()
    framel = ( framel + 1 ) Mod 3; 3 - количество кадров
End If
DrawImage pein_runl, x, y, framel
 x = x - 4
Else

nado = 10

EndIf



If KeyDown(205) Then
nado = 1 ; 1 - бежать

If MilliSecs() > frameTimel + 100 Then
    frameTimel = MilliSecs()
    frame = ( frame + 1 ) Mod 3; 3 - количество кадров
End If
DrawImage pein_run, x, y, frame
  x = x + 4
Else
nado = 0 ; 0 - стоять на месте
EndIf



HidePointer


Flip
Wend

End


RBK 22.11.2011 02:45

Ответ: Помогите с LoadAnimImage
 
Я тебе советую вынести HidePointer из цикла, поставь его перед ним.

Сначала подумал что ошибка в блоке If KeyDown(203), но потом понял что у тебя условие If KeyDown(205)... else срабатывает.

подумай про использование команд Select, Const и Function.

St_AnGer 22.11.2011 10:19

Ответ: Помогите с LoadAnimImage
 
Код:

If KeyDown(203) Then
nado = 3 ; 3 - бежать
 If MilliSecs() > frameTime + 100 Then
    frameTime = MilliSecs()
    framel = ( framel + 1 ) Mod 3; 3 - количество кадров
End If
DrawImage pein_runl, x, y, framel
 x = x - 4
Else

nado = 10

EndIf



If KeyDown(205) Then
nado = 1 ; 1 - бежать

If MilliSecs() > frameTimel + 100 Then
    frameTimel = MilliSecs()
    frame = ( frame + 1 ) Mod 3; 3 - количество кадров
End If
DrawImage pein_run, x, y, frame
  x = x + 4
Else
nado = 0 ; 0 - стоять на месте
EndIf

изменить на

Код:

If KeyDown(203) Then
    nado = 3 ; 3 - бежать
    If MilliSecs() > frameTime + 100 Then
        frameTime = MilliSecs()
        framel = ( framel + 1 ) Mod 3; 3 - количество кадров
    End If
    DrawImage pein_runl, x, y, framel
    x = x - 4

Else If KeyDown(205) Then

    nado = 1 ; 1 - бежать

    If MilliSecs() > frameTimel + 100 Then
        frameTimel = MilliSecs()
        frame = ( frame + 1 ) Mod 3; 3 - количество кадров
    End If
    DrawImage pein_run, x, y, frame
    x = x + 4
Else
    if nado = 1
        nado = 0 ; 0 - стоять на месте
    else if nado = 3
        nado = 10
    end if
EndIf

Что я сделал? Банально объединил два твоих условия на клавиши 203 и 205. Твоё условие на клавишу 203 попросту не срабатывало из за следующего отдельного от него условия клавиши 205. Банальность, а просидеть над этим можно долго при большом коде(по себе знаю :) )

зыЖ привыкай сразу структурировать код (хотя бы как у меня, просто каждый подуровень на 4 пробела отодвигать), иначе потом запутаешься в коде из за его нечитаемости.

Nex 22.11.2011 10:30

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

Сообщение от St_AnGer (Сообщение 210605)
[code]
зыЖ привыкай сразу структурировать код (хотя бы как у меня, просто каждый подуровень на 4 пробела отодвигать), иначе потом запутаешься в коде из за его нечитаемости.

Лучше на 5 нажатием кнопки "Tab".

St_AnGer 22.11.2011 10:32

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

Сообщение от Nex (Сообщение 210607)
Лучше на 5 нажатием кнопки "Tab".

ну я табом и пользуюсь для структурирования. Просто в теге CODE таб не работает, вот на 4 пробела и приходится двигать(поэтому так и написал).

Okay 22.11.2011 23:28

Ответ: Помогите с LoadAnimImage
 
Из-за чего может появляться оранжевая точка перед спрайтом?
В редакторе открывал изображение, ничего лишнего нету.

Okay 22.11.2011 23:32

Ответ: Помогите с LoadAnimImage
 

Dzirt 22.11.2011 23:58

Ответ: Помогите с LoadAnimImage
 
Думаю просто конец одного кадра попадает в начало другого...попробуй просмотреть в редакторе изображение поделив его на кадры.

Okay 23.11.2011 00:28

Ответ: Помогите с LoadAnimImage
 
Спасибо. помогло


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

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