DC-SWAT Forum
SDL & Event - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: DreamShell (/forum-3.html)
+--- Форум: Programming (/forum-28.html)
+--- Тема: SDL & Event (/thread-833.html)



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 &amp; 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 &amp; 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 &amp; 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 &amp; Event - zaero - 28.01.2006 02:29

Спасибо... =) Хорошо учту.... Спасиб что сказал =)