SDL & Event - zaero - 24.01.2006 02:35
Swat, мне нужна помощь. Как получить событие на SDL ? Вот пример. Мне в нем надо чтоб при стыке двух обьектов например вылазила картинка... И еще как узнать координаты обьекта?
Код:
-- The question about event to Swat by zaero
function mySDL_init_video()
SDL.SDL_BlitSurface = SDL.SDL_UpperBlit;
--Инициализируем SDL
SDL.SDL_Init(SDL.SDL_INIT_VIDEO);
--Закрываем графику DreamShell
--DS.ds_draw_shutdown();
--Устанавливаем видеорежим в 640x480 16 bit
flags = SDL.bit_or(SDL.SDL_HWSURFACE, SDL.SDL_DOUBLEBUF);
screen = SDL.SDL_SetVideoMode(640,480,16,flags);
end
function myPause_and_DS_init_video()
--Пауза в 3 секунды
SDL.SDL_Delay(3000);
--Инициализируем назад графику DreamShell
--DS.ds_draw_init();
end
function myMove_general()
mySDL_init_video() --инициализируем SDL и выставляем видео режим
function myMove(n,d)
if n<500 then
--- движение по горизонтали
SDL.SDL_drawCircle_TG(screen, n, 240, 10, 255, 0, SDL.SDL_TG_ANTIALIAS);
SDL.SDL_drawCircle_TG(screen, n-30, 240, 10, 0, 0, SDL.SDL_TG_ANTIALIAS);
-- движение по вертикали
SDL.SDL_drawCircle_TG(screen, 480, n-240, 10, -255, 0, SDL.SDL_TG_ANTIALIAS);
SDL.SDL_drawCircle_TG(screen, 480, n-270, 10, 0, 0, SDL.SDL_TG_ANTIALIAS);
SDL.SDL_Delay(100); -- Задаем скорость перемещения
SDL.SDL_Flip(screen);
end
end;
function myMove_value()
for i=1, 500, 30 do
n=i
myMove(n) -- Вызываем функцию и передаем ей параметры
end end;
myMove_value() -- Вызываем функцию
myPause_and_DS_init_video() -- пауза на 3 секунды
end
myMove_general()
SDL & Event - SWAT - 24.01.2006 18:28
Чет понаписал нифига не понять, одно в другом...
Я немного исправил...
И какого объекта ты хочеш узнать коордитаны?
Если вот у этих кружков которые ты тут рисуеш... так ты же им сам задаеш координаты, ты их просто запоминай где нибудь и будеш знать где и что в данный момент находится...
И из этих же сохраненных координат ты и будеш проверять состыковались они или нет, чтобы нарисовать картинку.
Создай функцию которая этим будет заниматься и вставь ее в главный цикл.
Код:
function mySDL_init_video()
SDL.SDL_BlitSurface = SDL.SDL_UpperBlit;
--Инициализируем SDL
SDL.SDL_Init(SDL.SDL_INIT_VIDEO);
--Закрываем графику DreamShell
--DS.ds_draw_shutdown();
--Устанавливаем видеорежим в 640x480 16 bit
flags = SDL.bit_or(SDL.SDL_HWSURFACE, SDL.SDL_DOUBLEBUF);
screen = SDL.SDL_SetVideoMode(640,480,16,flags);
end
function myPause_and_DS_init_video()
--Пауза в 3 секунды
SDL.SDL_Delay(3000);
--Инициализируем назад графику DreamShell
--DS.ds_draw_init();
end
function myMove(n)
if n < 500 then
--- движение по горизонтали
SDL.SDL_drawCircle_TG(screen, n, 240, 10, 255, 0, SDL.SDL_TG_ANTIALIAS);
SDL.SDL_drawCircle_TG(screen, n-30, 240, 10, 0, 0, SDL.SDL_TG_ANTIALIAS);
-- движение по вертикали
SDL.SDL_drawCircle_TG(screen, 480, n-240, 10, -255, 0, SDL.SDL_TG_ANTIALIAS);
SDL.SDL_drawCircle_TG(screen, 480, n-270, 10, 0, 0, SDL.SDL_TG_ANTIALIAS);
SDL.SDL_Delay(100); -- Задаем скорость перемещения
SDL.SDL_Flip(screen);
end
end
function myMove_general()
mySDL_init_video() --инициализируем SDL и выставляем видео режим
end
function myMove_value()
for i=1, 500, 30 do
myMove(i) -- Вызываем функцию и передаем ей параметры
end
end
myMove_general()
myMove_value() -- Вызываем функцию
myPause_and_DS_init_video() -- пауза на 3 секунд
Да и у тебя и так заканчивается цикл когда 2 кружка стыкуются:))))
Рисуй картинку после этого и все гггггг
SDL & Event - zaero - 25.01.2006 02:19
Я уже и сам разобрался =)) Спасибо... =)
Тут другой вопрос. Не могу заставить SDL проигрывать музыку... Вот мой исходник:
Код:
--sound test
-- Инициализируем Аудио
if SDL.SDL_Init(SDL.SDL_INIT_AUDIO) == -1 then
print("SDL_Init:%\n",SDL.SDL_GetError())
end
-- Открывем аудио поток
if SDL.Mix_OpenAudio(44100, 16, 2, 1024) < 0 then
printf("Error initializing SDL_mixer: %s\n", SDL.Mix_GetError());
end;
-- грузим нашь файл *.WAV
sound1 = SDL.Mix_LoadWAV_RW(SDL.SDL_RWFromFile("1.wav","rb"),1);
function PlaySound(sound1)
SDL.Mix_PlayChannelTimed(3,sound1,1,10)
end
function PlayMusic (file,chanel)
music = SDL.Mix_LoadMUS (file);
SDL.Mix_PlayMusic (music, chanel);
end
PlaySound(sound1)
PlayMusic (sound1, -1)
Ввобщем не хочит и все! Ни фун-я PlaySound() ни PlayMusic() нихрена не проигрывает!!! В чем моя ошибка?
SDL & Event - SWAT - 27.01.2006 21:43
Ошибочки конечно есть...
Но вот я тоже сделал и в DSS не хотит петь... попробуй в DS и не делай слишком высокого качества файл, делай как в дефолт указано...
Код:
initf = SDL.bit_or(SDL.SDL_INIT_VIDEO, SDL.SDL_INIT_AUDIO);
vflags = SDL.bit_or(SDL.SDL_HWSURFACE, SDL.SDL_DOUBLEBUF);
if SDL.SDL_Init(initf) == -1 then
print("SDL_Init_error: ",SDL.SDL_GetError())
end
screen = SDL.SDL_SetVideoMode(640,480,16,vflags);
-- if SDL.Mix_OpenAudio(11025, 8, 1, 512) < 0 then
if SDL.Mix_OpenAudio(SDL.MIX_DEFAULT_FREQUENCY, SDL.MIX_DEFAULT_FORMAT, SDL.MIX_DEFAULT_CHANNELS, 512) < 0 then
print("Warning: Couldn't set 11025 Hz 8-bit audio\n- Reason: ", SDL_GetError());
end
print("Loading music.wav ...");
local Mix_Chunk = SDL.Mix_LoadWAV_RW(SDL.SDL_RWFromFile("music.wav", "rb"), 1);
SDL.Mix_VolumeChunk(Mix_Chunk, 128);
print("Play music...");
local Channel = SDL.Mix_PlayChannelTimed(-1, Mix_Chunk, 5, -1);
print("Played on channel:", Channel);
print("Close audio...");
SDL.Mix_FreeChunk(Mix_Chunk);
SDL.Mix_CloseAudio();
print("Bye");
SDL & Event - zaero - 28.01.2006 02:29
Спасибо... =) Хорошо учту.... Спасиб что сказал =)
|