Jump to content

Search the Community

Showing results for tags 'sdl'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Comunidade
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Apresentação de Projectos de Programação
    • Downloads
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Pascal
    • Python
    • Bases de Dados
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica e Automação Industrial
    • Matemática
    • Software de Contabilidade e Finanças
    • Dúvidas e Discussão de Programação
  • Outras Áreas
    • Notícias de Tecnologia
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website


GitHub


LinkedIn


Twitter


Facebook

Found 17 results

  1. Boa noite, Estou usando Visual Studio 2019 e estou com varios problemas.. Estou fazendo um teste de bibliotecas giflib com addon https://github.com/grimfang4/SDL_gifwrap, para SDL2. para correr gifs animados em SDL2. usando o exemplo base do gifwrap o programa corre e compila, mas tendo logo a partida 2 problemas, tenho que usar main.c (C, quando quero usar cpp) e include tem que ser #include "SDL_gifwrap/SDL_gifwrap.c", onde deveria ser .h, mas se colocar .h o programa simplesmente nao compila. O erro aqui apresentado com .h é o mesmo de quando tento compilar com main.cpp. LNK2019. main.c/cpp neste caso so roda se for c. //BEGIN PROGRAM HEAD //BEGIN INCLUDES //local headers //#include "helper.h" #include <gif_lib.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "SDL_gifwrap/SDL_gifwrap.h" //should be SDL_gifwrap.c #include "sdl.h" #include <SDL_image.h> //END INCLUDES //BEGIN GLOBALS SDL_Window* Window; SDL_Renderer* Renderer; //SDL_Window* Window = NULL; //SDL_Renderer* Renderer = NULL; SDL_Texture* texture_; SDL_Rect gif; GIF_Image* gifA = NULL; Uint16 i = 0; int br; int bg; int bb; int logging = 0; //END GLOBALS //BEGIN FUNCTION PROTOTYPES void draw_current_gif_frame(void); //END FUNCTION PROTOTYPES //BEGIN MAIN FUNCTION int main(int argc, char* argv[]) { (void)argc; (void)argv; SDL_Init(SDL_INIT_EVERYTHING); //TTF_Init(); Window = SDL_CreateWindow("SDL2 gif stress", 50, 50, 350, 350, 0); //Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED); SDL_SetRenderDrawColor(Renderer, 255, 0, 0, 255); SDL_RenderClear(Renderer); //BEGIN GIF int error; // GifFileType * gif2 = DGifOpenFileName("c-exec.gif", &error); char gifname[50]; if (argc < 2) sprintf(gifname, "33.gif"); else sprintf(gifname, argv[1]); GifFileType* gif2 = DGifOpenFileName(gifname, &error); if (DGifSlurp(gif2) == GIF_ERROR) { DGifCloseFile(gif2, &error); } // // SDL_Log("%d",gif2->SColorMap->Colors->Red); br = gif2->SColorMap->Colors->Red; // SDL_Log("%d",gif2->SColorMap->Colors->Green); bg = gif2->SColorMap->Colors->Green; // SDL_Log("%d",gif2->SColorMap->Colors->Blue); bb = gif2->SColorMap->Colors->Blue; if (gifA = GIF_LoadImage(gifname)) i = 0; SDL_Event event; int running = 1; int pause = 0; //BEGIN TIMING int delay; unsigned int startTime, currentTime, frameTime = 0; startTime = SDL_GetTicks(); delay = gifA->frames[i]->delay; //END TIMING //END INIT //BEGIN MAIN LOOP while (running) { //BEGIN EVENT LOOP while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { running = 0; } else { SDL_SetWindowTitle(Window, "SDL 2 - Animated GIF"); } } //END EVENT LOOP currentTime = SDL_GetTicks(); frameTime = currentTime - startTime; startTime = currentTime; if (delay <= 0) { i++; if (i > gifA->num_frames - 1) i = 0; delay = gifA->frames[i]->delay; } delay -= frameTime; /*}*/ //BEGIN RENDERING draw_current_gif_frame(); //END RENDERING SDL_Delay(33); } //END MAIN LOOP //BEGIN CLEAN UP if (texture_ != NULL) SDL_DestroyTexture(texture_); if (gifA != NULL) GIF_FreeImage(gifA); SDL_DestroyRenderer(Renderer); SDL_DestroyWindow(Window); //TTF_Quit(); SDL_Quit(); //exit_(); //END CLEAN UP return EXIT_SUCCESS; } //END MAIN FUNCTION void draw_current_gif_frame() { gif.x = (gifA->frames[i]->left_offset);// *current_scale) + gif_canvas.dst.x; gif.y = (gifA->frames[i]->top_offset);// * current_scale) + gif_canvas.dst.y; gif.w = (gifA->frames[i]->width);// * current_scale); gif.h = (gifA->frames[i]->height);// * current_scale); // SDL_SetRenderDrawColor(Renderer, br, bg, bb, 255); SDL_RenderFillRect(Renderer, &gif); //SDL_RenderClear(Renderer); texture_ = SDL_CreateTextureFromSurface(Renderer, gifA->frames[i]->surface); SDL_RenderCopy(Renderer, texture_, NULL, &gif); SDL_RenderPresent(Renderer); } agradeco a ajuda, pois estou mentalmente bloqueado, possivelmente por algo simples. P.S ja cheguei a add extern"C" no include mas tambem não ajudou. Obrigado
  2. PsySc0rpi0n

    SDL2 - Dúvidas

    Boas... Andava aqui a ler uns tutoriais sobre SDL e estava a tentar criar uma janela com uma imagem! Estou apenas no início! Mas a janela não está a carregar a imagem. Fica como que bloqueada e quando arrasto a janela ela fica com uma imagem do desktop como se fosse a imagem que eu carreguei! Não sei se tem a ver com o facto de eu ter pegado numa imagem .jpg e a ter "Gravado Como" .bmp, estando a usar a função SDL_LoadBMP()... Também já tentei mesmo abrir uma imagem .jpg no Gimp e exportar como .bmp em vez de fazer "Gravar Como" mas o resultado é o mesmo. O código é este: #include <stdio.h> #include "SDL2/SDL.h" #include <stdbool.h> const int screenWidth = 1024; const int screenHeight = 768; bool sdl_Init(SDL_Window* pWindow, SDL_Surface* pSurface); bool sdl_LoadMedia(SDL_Surface* pSurface, char* pfilepath); void sdl_Close(SDL_Window* pWindow, SDL_Surface* pSurface); int main(int argc, char** argv){ SDL_Window* gWindow = NULL; SDL_Surface* gScreenSurface = NULL; SDL_Surface* gXOut = NULL; SDL_Event evt; bool quit = false; if( !sdl_Init(gWindow, gScreenSurface) ){ printf("Failed to initialise!\n"); }else{ if( !sdl_LoadMedia(gXOut, "Devil_May_Cry_III.bmp") ){ printf("Failed to load media!\n"); }else{ while(!quit){ while(SDL_PollEvent (&evt) != 0){ if(evt.type == SDL_QUIT) quit = true; } SDL_BlitSurface(gXOut, NULL, gScreenSurface, NULL); SDL_UpdateWindowSurface(gWindow); } } } sdl_Close(gWindow, gXOut); return 0; } /*********************** **Function definitions** ************************/ bool sdl_Init(SDL_Window* pWindow, SDL_Surface* pSurface){ bool success = true; if(SDL_Init(SDL_INIT_VIDEO) < 0){ printf("SDL could not initialize! SDL_Error: %s!\n", SDL_GetError()); success = false; }else{ pWindow = SDL_CreateWindow( "WindowZed fun", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, screenWidth, screenHeight, SDL_WINDOW_SHOWN ); if(pWindow == NULL){ printf("Window Could not be created! SDL Error: %s!\n", SDL_GetError()); success = false; }else{ pSurface = SDL_GetWindowSurface(pWindow); } } return success; } bool sdl_LoadMedia(SDL_Surface* pSurface, char* pfilepath){ bool success = true; pSurface = SDL_LoadBMP(pfilepath); if(pSurface == NULL){ printf("Unable to load %s. SDL Error: %s!\n", pfilepath, SDL_GetError()); success = false; } return success; } void sdl_Close(SDL_Window* pWindow, SDL_Surface* pSurface){ SDL_FreeSurface(pSurface); pSurface = NULL; SDL_DestroyWindow(pWindow); pWindow = NULL; SDL_Quit(); }
  3. edub13

    SDL Keyboard input

    Boas pessoal, estou a voltar a tentar fazer algumas coisas em SDL, e não estou a conseguir fazer com que a imagem se mova pelo ecrã enquanto carrego numa tecla, so se move clique por clique, como posso resolver isso? Aqui esta o meu código abaixo #include "SDL/SDL.h" #include "SDL/SDL_image.h" #include <stdio.h> int main(int argc, char** argv){ bool quit = false; SDL_Init(SDL_INIT_VIDEO); SDL_Event event; SDL_Surface* buffer = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE); if(!buffer){ printf("%d", SDL_GetError()); return -1; } SDL_Surface* background = IMG_Load("background.png"); if(!background){ printf("%d", SDL_GetError()); return -1; } SDL_Surface* actor = IMG_Load("actor.png"); if(!actor){ printf("%d", SDL_GetError()); return -1; } SDL_Rect actor_rect; actor_rect.x = 100; actor_rect.y = 100; while(!quit){ while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_QUIT: quit = true; break; case SDL_KEYDOWN: if(event.key.keysym.sym == SDLK_UP) { actor_rect.y -= 5; } if(event.key.keysym.sym == SDLK_DOWN) { actor_rect.y += 5; } if(event.key.keysym.sym == SDLK_LEFT) { actor_rect.x -= 5; } if(event.key.keysym.sym == SDLK_RIGHT) { actor_rect.x += 5; } break; case SDL_KEYUP: if(event.key.keysym.sym == SDLK_UP) { actor_rect.y -= 0; } if(event.key.keysym.sym == SDLK_DOWN) { actor_rect.y += 0; } if(event.key.keysym.sym == SDLK_LEFT) { actor_rect.x -= 0; } if(event.key.keysym.sym == SDLK_RIGHT) { actor_rect.x += 0; } break; } } SDL_SetColorKey(actor, SDL_SRCCOLORKEY, SDL_MapRGB(actor->format, 0xFF, 0xFF, 0xFF )); SDL_BlitSurface(background, NULL, buffer, NULL); // background SDL_BlitSurface(actor, NULL, buffer, &actor_rect); // actor SDL_Flip(buffer); } SDL_FreeSurface(actor); SDL_FreeSurface(background); SDL_Quit(); return 0; } Cumps
  4. Boas pessoal, estou com um problema mas não é a nível de código. E nisto peço especialmente a ajuda dos utilizadores mais experientes em C/C++ e em Linux. É o seguinte, sou novo no Linux. Decidi mandar abaixo o Windows e utilizar só Linux. Aqui utilizo o compilador Code::Blocks. Tenho vindo a programar sem problemas tanto C como C++. E ontem decidi começar a aprender a library SDL. Mas acontece que, não sei porque razão, o meu compilador não reconhece as funções da biblioteca. Ele vai à Biblioteca, e encontra-a, aparentemente até vai buscar algumas estruturas e macros sem problemas, mas aquelas funções ele não consegue ir buscar. #include "SDL.h" #include "SDL_ttf.h" int main(void) { SDL_Surface *Hello = NULL; SDL_Surface *Screen = NULL; SDL_Init( SDL_INIT_EVERYTHING ); return 0; } E o erro de compilador é: Undefined Reference to 'SDL_Init' Só que já fui ver a biblioteca SDL.h e está lá a função, como podem ver. /* SDL - Simple DirectMedia Layer Copyright (C) 1997-2012 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Sam Lantinga slouken@libsdl.org */ /** @file SDL.h * Main include header for the SDL library */ #ifndef _SDL_H #define _SDL_H #include "SDL_main.h" #include "SDL_stdinc.h" #include "SDL_audio.h" #include "SDL_cdrom.h" #include "SDL_cpuinfo.h" #include "SDL_endian.h" #include "SDL_error.h" #include "SDL_events.h" #include "SDL_loadso.h" #include "SDL_mutex.h" #include "SDL_rwops.h" #include "SDL_thread.h" #include "SDL_timer.h" #include "SDL_video.h" #include "SDL_version.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /** @file SDL.h * @note As of version 0.5, SDL is loaded dynamically into the application */ /** @name SDL_INIT Flags * These are the flags which may be passed to SDL_Init() -- you should * specify the subsystems which you will be using in your application. */ /*@{*/ #define SDL_INIT_TIMER 0x00000001 #define SDL_INIT_AUDIO 0x00000010 #define SDL_INIT_VIDEO 0x00000020 #define SDL_INIT_CDROM 0x00000100 #define SDL_INIT_JOYSTICK 0x00000200 #define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ #define SDL_INIT_EVENTTHREAD 0x01000000 /**< Not supported on all OS's */ #define SDL_INIT_EVERYTHING 0x0000FFFF /*@}*/ /** This function loads the SDL dynamically linked library and initializes * the subsystems specified by 'flags' (and those satisfying dependencies) * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup * signal handlers for some commonly ignored fatal signals (like SIGSEGV) */ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); /** This function initializes specific SDL subsystems */ extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); /** This function cleans up specific SDL subsystems */ extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); /** This function returns mask of the specified subsystems which have * been initialized. * If 'flags' is 0, it returns a mask of all initialized subsystems. */ extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); /** This function cleans up all initialized subsystems and unloads the * dynamically linked library. You should call it upon all exit conditions. */ extern DECLSPEC void SDLCALL SDL_Quit(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* _SDL_H */ Agora, não sei porque é que isto está a acontecer. Já me disseram que poderia ser do linker do compilador com essa biblioteca, e segundo sei o linker é uma ligação do compilador à biblioteca. Eu configurei o IDE para ir buscar à pasta onde estão estas bibliotecas, mas isso não me parece problema porque ele efetivamente encontra as bibliotecas, não reconhece são as suas funções. Mas pelos vistos reconhece por exemplo o tipo de dados "SDL_Surface". Já me aconselharam a colocar "#undef _SDL_H" no início. Não resultou, obviamente. Estou nisto há quase dois dias. Estou a perder imenso tempo nesta questão, tempo que podia estar a aprender a trabalhar com a biblioteca e estou bastante frustrado. Como sou novo no Linux não compreendo muito bem o funcionamento das flags ainda. Peço um bocado de paciência mas ainda assim ajuda nesta questão que me está a atordoar completamente. Muito obrigado, desde já.
  5. Boas pessoal, tenho feitos uns programitas com C++ e SDL em ambiente linux (ubuntu), e tenho testado tudo em linha de comandos. O que eu queria agora era poder correr estes programas noutro computador qualquer, e para isso precisava de ajuda pois não sei fazer o processo de criar um executável do programa e o que este necessita para conseguir correr noutro computador... Já agora, depois de feito este processo, o programa também poderá correr em win ?
  6. [TUTORIAL] Criação de um jogo em OpenGL, SDL e C++ Introdução Este tutorial irá abordar o desenvolvimento de um jogo eletronico em 3D utilizado as bibliotecas OpenGL e SDL. A linguagem escolhida para o seu desenvolvimento foi o C++. Abaixo será apresentadas uma breve descrição das tecnologias a utilizar, o que não quer dizer que não tenham de pesquisar um pouco mais sobre as mesmas. Os tutoriais são em video e vão sendo disponibilizados no Youtube. Open Graphics Library Em meados dos anos 80 cada fabricante de hardware utilizava as suas próprias instruções para criar gráficos em 2D e em 3D. Com esta barreira era um grande desafio desenvolver aplicações que funcionassem nos diversos Hardwares existentes. Foi então que em 1992 o OpenGL foi criado onde o seu padrão é mantido pela Architecture Review Board. Esta biblioteca contém algumas centenas de funções que fornecem acesso a todos os recursos dos hardwares de video para que facilmente se possa ligar ou desligar vários aspectos do hardware. Left 4 Dead 2 utiliza OpenGL Outras bibliotecas relacionadas ao OpenGL OpenGL Utility Library (GLU) – Todas as funçoes desta biblioteca tem o prefixo de gui. Fornece várias funções axuliares para montagem de matrizes de visualização e projecções entre outras coisas. OpenGL Utility Toolkit (GLUT) – É um toolkit que abstrai o sistema de janelas para ajudar a criação de uma aplicação em OpenGL. Simple DirectMedia Layer É uma biblioteca cross-platform e opensource escrita em C que auxilia na criação de interfaces gráficas simples, som e dispositivos de entrada. Esta biblioteca é muita ultilizada por game developers pois é muito simples de utilizar e portável para diferentes sistemas como Android, iOS, Linux, Windows e OSX. É muito utlizado para complementar o OpenGL para forncecer informações de input como por exemplo do rato, teclado, joystick e comandos pois estes estão fora do alcance do OpenGL, Esta biblioteca está disponivel para diversas linguagens de programação como por exemplo C, C++, Python, etc.. World of Goo é desenvolvido utilizando SDL Recursos Para a realiação deste tutorial pode ser utilizado qualquer sistemas operativo, IDE, compilador, ect... Durante o tutorial será utlizado Windows, Linux, tanto na distribuição Arch como no Ubuntu para facilitar os mais iniciantes nesta área. Como IDE irei utilizar o Eclipse, para que os utilizadores tenham um melhor controlo sobre o tutorial. Sistema Operativo Linux Eclipse CDT (C/C++ Development Tooling) Força de vontade! Planeamento do jogo A ideia inicial vai ser um jogo de naves espaciais em 3D mas podem ser dadas dicas e mais ideias para o jogo. Vai ser fornecido todos os materiais necessaŕios como por exemplo as texturas, modelos 3D, etc.. Lista de tutoriais: Introdução ao SDL Ajuda Caso tenham dificulades em qualquer assunto podem contactar-me pelo twitter. twitter.com/jmspt
  7. edub13

    Pac Man?

    Boas pessoal queria fazer um jogo do estilo do PacMan so que não sei por onde começar, e o que preciso de saber para o fazer.. Vou usar libraria SDL. Podiam me dar umas dicas? Tipo os passos a seguir e mais ou menos como o conseguir fazer.. Mas sem dar código so mesmo dizendo, para eu ir aprendendo.. Consigo colocar o "pacman" na janela e move-lo 😛 Cumps
  8. Boa noite, não é possível criar um ficheiro .o de um ficheiro escrito em SDL que não tenha definida a sua função main? gcc teste.c -lSDL `sdl-config --cflags --libs` -lSDL_image Undefined symbols: "_SDL_main", referenced from: -[sDLMain applicationDidFinishLaunching:] in libSDLmain.a(SDLMain.o) ld: symbol(s) not found collect2: ld returned 1 exit status Assim estou a ser obrigado a escrever código (SDL) em apenas um ficheiro
  9. Titulo do Projecto: PAP Games Última Versão: N/A Site Oficial: http://groups.google.com/group/papgames Licença: N/A Líder do Projecto: HappyHippyHippo Membros Actuais do Projecto: HappyHippyHippo, Flinger, Pikax, daniivo,xtrm0,Polska Screenshots: N/A Descrição do Projecto:O PAP Games é um grupo formado por um conjunto de membros do fórum portugal-a-programar com o objetivo de enriquecer a aprendizagem na criação de software, especificamente na criação de jogos. Downloads: http://code.google.com/p/papgames/downloads/list O projecto encontra-se numa fase embrionária. Estão-se a ultimar os preparativos, finalizando as configurações das várias ferramentas que darão suporte ao projecto. Existem já vários membros interessados, pelo que abrimos assim as candidaturas através da página do Groups, de forma a sabermos quem vai de facto integrar o projecto de podermos discutir entre todos os caminhos exactos a seguir. Alguns aspectos já foram decididos. As tecnologias utilizadas serão SDL e C/C++. Dentro destas tecnologias existem membros com diferentes graus de conhecimento, desde membros com bastante experiência até membros que estão a começar a aprender. Por isso as únicas restrições que se colocam é o gosto/vontade de aprender, e alguma paciência para poder ensinar/guiar membros menos experientes. Vou mantendo este post actualizado à medida que o grupo for evoluindo.
  10. Estava a rever os tuts de SDL do foo e após fazer o programa de abrir imagens de diferentes formatos(PNG) , ele não funcionou.. Eu revi o código e ele esta todo direitinho, tanto as funções como o main, o que se passa é quando chega a parte de chamar a função load_image , ele chama mas não conssegue abrir as imagens, e a Surface fica com NULL e o programa termina... COD: #include "SDL.h" #include "SDL_image.h" #include <string> const int SCREEN_WIDTH = 640; const int SCREEN_HIGHT = 480; const int SCREEN_BPP = 32; SDL_Surface *screen=NULL; SDL_Surface *bruno=NULL; SDL_Surface *background=NULL; SDL_Surface *Load_Image( std::string filename ) { SDL_Surface *loadedImage=NULL; SDL_Surface *optimizedImage=NULL; loadedImage=IMG_Load( filename.c_str() ); if(loadedImage != NULL) { optimizedImage=SDL_DisplayFormat( loadedImage ); SDL_FreeSurface( loadedImage ); } return optimizedImage; } void apply_surface( int x, int y, SDL_Surface *source, SDL_Surface *destination ) { SDL_Rect offset; offset.x=x; offset.y=y; SDL_BlitSurface( source, NULL, screen, &offset ); } bool Init() { if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) return false; screen=SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HIGHT, SCREEN_BPP, SDL_SWSURFACE ); if( screen == NULL ) return false; SDL_WM_SetCaption( "Optimized images Test", NULL ); return true; } void clean() { SDL_FreeSurface( background ); SDL_FreeSurface( bruno ); SDL_Quit(); } int main( int argc, char* args[] ) { if( Init() == false ) return 1; background=Load_Image( "background.png" ); bruno=Load_Image( "bruno.png" ); if( background == NULL || bruno == NULL ) return 1; apply_surface( 0, 0, background, screen ); apply_surface( 320, 0, background, screen ); apply_surface( 0, 240, background, screen ); apply_surface( 320, 240, background, screen ); apply_surface( (SCREEN_WIDTH-280)/2, (SCREEN_HIGHT-200)/2, bruno, screen ); if( SDL_Flip( screen ) == -1 ) return 1; SDL_Delay( 10000 ); clean(); return 0; } Alguém me consegue ajudar? Ps: As imagens estão no directório do programa, como deviam estar.
  11. O programa apenas faz o load da imagem hello e mostra no canto superior esquerdo, mas deve mostrar ao centro sobreposta as 4 imagens de background.. #include "SDL.h" #include <string> /* The attributes of the screen */ const int SCREEN_WIDTH=640; // largura const int SCREEN_HEIGHT=480; // altura const int SCREEN_BPP=32; // bits per pixel -> 32-bit colour /* The surfaces that will be used */ SDL_Surface* message=NULL; //hello image SDL_Surface* screen=NULL; SDL_Surface* background=NULL; SDL_Surface *load_Image(std::string filename){ /*Temporary storage for the image that's loaded*/ SDL_Surface* loadedImage=NULL; /*The optimized image that will be used*/ SDL_Surface* optimizedImage=NULL; /*Load the image*/ loadedImage=SDL_LoadBMP(filename.c_str()); //a imagem não deve ser logo usada pois é de 24 bits e a janela(screen) é de 32 bits /*if image sucesseful loaded*/ if(loadedImage!=NULL){ //create an optimized image optimizedImage=SDL_DisplayFormat(loadedImage); //Free the old image -> Apagar da memória SDL_FreeSurface(loadedImage); } //return the oprimized image return optimizedImage; } void apply_surface(int x,int y,SDL_Surface* source,SDL_Surface* destination){ //Make a temporary rectangle to hold the offsets SDL_Rect offset; //Give the offsets to the rectangle offset.x=x; offset.y=y; //Blit the surface SDL_BlitSurface(source,NULL,destination,NULL); } int main(int argc, char* args[]) { //START SDL, se falhar faz return 1 para fechar o programa if(SDL_Init(SDL_INIT_EVERYTHING)==-1) return 1; //Set up the screen screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,SDL_SWSURFACE); //Se falhar a criação do screen, fecha o programa if(screen==NULL) return 1; //Na parte superior da janela(caption), escreve Hello World SDL_WM_SetCaption("Hello World",NULL); //Load the images -> call funtion load_Image message=load_Image("hello.bmp"); background=load_Image("background.bmp"); //Apply the background to the screen apply_surface(0,0,background,screen); //canto superior esquerdo apply_surface(320, 0, background, screen); //canto superior direito apply_surface(0, 240, background, screen); //canto inferior esquerdo apply_surface(320, 240, background, screen); //canto inferior direito //Apply the message to the screen apply_surface(180,140,message,screen); //Update the screen if(SDL_Flip(screen)==-1) return 1; //Wait 2 seconds SDL_Delay(2000); //miliseconds //Free the surfaces SDL_FreeSurface(message); SDL_FreeSurface(background); //Quit SDL SDL_Quit(); return 0; }
  12. Boas pessoal, estou com outro problema, agora quando movo o sprite ele esta muito lento, à alguma função ou assim que resolva isso? 😁 Cumps
  13. rocks

    Imagem JPG com SDL

    Ola, boa noite eu ja criei (com ajuda) a janela em sdl mas agora para por la uma imagem jpg como faço? obrigado
  14. rocks

    Aprender SDL

    ola, boa tarde eu ando a aprender sdl será que alguem me pode dar tutoriais EDIT: Titulo modificado
  15. edub13

    Tutorial SDL em C

    Pessoal alguem conhece algum "tutorial", de SDL em C ? E que quase todos os que encontro são em C++. (E de preferencia em portugues ? )
  16. Boas,estou á um dia a tentar fazer um jogo e já tenho um bug. O jogo é supostamente sobre fugir de zombies e tentar mata-los mas ja tenho um erro qu e quando o jogador tenta disparar a bala nao vai para onde devia. Ta aqui o codigo: #include "SDL/SDL.h" #include "SDL/SDL_opengl.h" #include <iostream> bool checkCollision(float Ax, float Ay, float Aw, float Ah, float Bx, float By, float Bw, float Bh) //Funcfion for checking collision { if ( Ay+Ah < By ) return false; //if A is more to the left than B else if ( Ay > By+Bh ) return false; //if A is more to the right than B else if ( Ax+Aw < Bx ) return false; //if A is higher than B else if ( Ax > Bx+Bw ) return false; //if A is lower than B return true; //There is a collision because none of above returned false } //start of the program int main( int argc, char* args[] ) { //initialize SDL SDL_Init(SDL_INIT_EVERYTHING); //Set OpenGL memory usage SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8); SDL_GL_SetAttribute( SDL_GL_BUFFER_SIZE, 32); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); //Caption of the window SDL_WM_SetCaption( "ZombiesDidWhat", NULL ); //Size of the window SDL_SetVideoMode(600,600,32, SDL_OPENGL ); //Specific the clear color glClearColor(1,1,1,1); //RED,GREEN,BLUE,ALPHA //What portion of the screen we will display glViewport(0,0,600,600); //Shader model - Use this glShadeModel(GL_SMOOTH); //2D rendering glMatrixMode(GL_PROJECTION); //"Save" it glLoadIdentity(); //Disable depth checking glDisable(GL_DEPTH_TEST); std::cout << "OpenGL is running\n"; std::cout << "Main loop has started\n"; //Handles the main loop bool isRunning = true; float feX; float feY; float pX; float pY; float pW=5; float pH=5; //For handling with event SDL_Event event; float myX = 300; //starting x position of player float myY = 535; //starting y position of player float width = 20; //width of the player & zombies float height = 65; //height of the player & zombies float z1X = 300; //starting x position of zombie float z1Y = 1; //starting y position of zombie float z2X = 100; //starting x position of zombie float z2Y = 200; //starting y position of zombie float z3X = 500; //starting x position of zombie float z3Y = 300; //starting y position of zombie bool firing; bool left = false,right = false; //we save in which state the button is bool up = false, down = false; //UP DOWN MOVEMENT /* bool up = false, down = false; */ //Main game loop while ( isRunning ) { //EVENTS while ( SDL_PollEvent(&event) ) { //if the window was closed if ( event.type == SDL_QUIT ) { isRunning = false; } //If a button was released and the button is escape if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_ESCAPE ) { isRunning = false; } if ( event.type == SDL_KEYDOWN ) //Check for presed down buttons { if ( event.key.keysym.sym == SDLK_LEFT ) //Check left key { left = true; //Set the boolean value for left key to true (it is pressed) } else if ( event.key.keysym.sym == SDLK_RIGHT ) //Check Right key { right = true; //Set the boolean value for right key to true (it is pressed) } else if ( event.key.keysym.sym == SDLK_UP ) { up = true; } else if ( event.key.keysym.sym == SDLK_DOWN ) { down = true; } } else if ( event.type == SDL_KEYUP ) //Checking for released buttons { if ( event.key.keysym.sym == SDLK_LEFT ) //Left key { left = false; //Set the value to false (key is released) } else if ( event.key.keysym.sym == SDLK_RIGHT ) //Right key { right = false; //Key is released } else if ( event.key.keysym.sym == SDLK_UP ) { up = false; } else if ( event.key.keysym.sym == SDLK_DOWN ) { down = false; } //UP DOWN MOVEMENT /* else if ( event.key.keysym.sym == SDLK_UP ) { up = false; } else if ( event.key.keysym.sym == SDLK_DOWN ) { down = false; } */ } //logic that should happen for a certain event } //LOGIC if ( left == true ) //If left key is pressed { myX -= 2.5; //Move left } if ( right == true ) //If right key is pressed { myX += 2.5; //Move right } if ( myX < 0 ) //If the left border of the pad is over the left part of the screen { myX = 0; //Put the pad back so it isn't over the border } if ( myX+width > 600 ) //If the pad is over the right border of the screen { myX = 600-width; //Move it back so it only touches the right border } if ( up == true ) { myY -= 2.5; } if ( down == true ) { myY += 2.5; } if ( myY < 0 ) //Upper border of screen { myY = 0; } if ( myY + height > 600 ) //Bottom border of screen { myY = 600-height; } if (z1X > myX) z1X-=1; else if (z1X < myX) z1X+=1; if (z1Y > myY) z1Y-=1; else if (z1Y < myY) z1Y+=1; if (z2X > myX) z2X-=1; else if (z2X < myX) z2X+=1; if (z2Y > myY) z2Y-=1; else if (z2Y < myY) z2Y+=1; if (z3X > myX) z3X-=1; else if (z3X < myX) z3X+=1; if (z3Y > myY) z3Y-=1; else if (z3Y < myY) z3Y+=1; if ( checkCollision(z1X,z1Y,width,height,myX,myY,width,height) == true ) //if there is a collision between the ball and pad { isRunning = false; } if ( checkCollision(z2X,z2Y,width,height,myX,myY,width,height) == true ) //if there is a collision between the ball and pad { isRunning = false; } if ( checkCollision(z3X,z3Y,width,height,myX,myY,width,height) == true ) //if there is a collision between the ball and pad { isRunning = false; } if ( checkCollision(z1X,z1Y,width,height,z2X,z2Y,width,height) == true ) //if there is a collision between the ball and pad { z1X+=0.7; z1Y+=0.7; } if ( checkCollision(z3X,z3Y,width,height,z2X,z2Y,width,height) == true ) //if there is a collision between the ball and pad { z2X+=0.7; z2Y+=0.7; } if ( checkCollision(z1X,z1Y,width,height,z3X,z3Y,width,height) == true ) //if there is a collision between the ball and pad { z1X+=0.7; z1Y+=0.7; } //If a mouse button was pressed if( event.type == SDL_MOUSEBUTTONDOWN) { //If the left mouse button was pressed if( event.button.button == SDL_BUTTON_LEFT ) { //Get the mouse offsets feX=event.button.x; feY=event.button.y; pX=myX; pY=myY; firing = true; if (pX > feX) pX-=20; else if (pX < feX) pX+=20; if (pY > feY) pY-=20; else if (pY < feY) pY+=20; if(firing == true && pX == feX && pY == feY) firing = false; } } if( event.type == SDL_MOUSEBUTTONUP) { //If the left mouse button was pressed if( event.button.button == SDL_BUTTON_LEFT ) { firing = false; } } //UP DOWN MOVEMENT /* if ( up == true ) { myY -= 0.3; } if ( down == true ) { myY += 0.3; } if ( myY < 0 ) //Upper border of screen { myY = 0; } if ( myY + height > 400 ) //Bottom border of screen { myY = 400-height; } */ //RENDERING to the screen glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); //Start rendering phase glOrtho(0,600,600,0,-1,1); //Set the matrix glColor4ub(0,0,255,255); glBegin(GL_QUADS); //Start drawing the rectangle glVertex2f(myX,myY); //Upper-left corner glVertex2f(myX+width,myY); //Upper-right corner glVertex2f(myX+width,myY+height); //Down-right corner glVertex2f(myX,myY+height); //Down-left corner glEnd(); //End drawing glColor4ub(0,220,35,255); glBegin(GL_QUADS); //Start drawing the rectangle glVertex2f(z1X,z1Y); //Upper-left corner glVertex2f(z1X+width,z1Y); //Upper-right corner glVertex2f(z1X+width,z1Y+height); //Down-right corner glVertex2f(z1X,z1Y+height); //Down-left corner glEnd(); //End drawing glBegin(GL_QUADS); //Start drawing the rectangle glVertex2f(z2X,z2Y); //Upper-left corner glVertex2f(z2X+width,z2Y); //Upper-right corner glVertex2f(z2X+width,z2Y+height); //Down-right corner glVertex2f(z2X,z2Y+height); //Down-left corner glEnd(); //End drawing glBegin(GL_QUADS); //Start drawing the rectangle glVertex2f(z3X,z3Y); //Upper-left corner glVertex2f(z3X+width,z3Y); //Upper-right corner glVertex2f(z3X+width,z3Y+height); //Down-right corner glVertex2f(z3X,z3Y+height); //Down-left corner glEnd(); //End drawing if (firing == true) { glColor4ub(125,125,125,255); glBegin(GL_QUADS); //Start drawing the rectangle glVertex2f(pX,pY); //Upper-left corner glVertex2f(pX+pW,pY); //Upper-right corner glVertex2f(pX+pW,pY+pH); //Down-right corner glVertex2f(pX,pY+pH); //Down-left corner glEnd(); //End drawing } glPopMatrix(); //End rendering phase SDL_GL_SwapBuffers(); SDL_Delay(1); //Delay / pause } SDL_Quit(); return 0; } Se precisarem de mais detalhes digam, admito que o codigo esta confuso.
  17. sagresMini

    Ubuntu SDL erro

    Boas... Comecei a pouco tempo a programar no ubuntu e hoje tive um erro esquisito, fiz um programa simples para testar a SDL mas não encontro nenhuma maneira de por os eventos a funcionar. Já alguém se deparou com a mesma dificuldade? #include <iostream> #include "stdio.h" #include "stdlib.h" #include "SDL/SDL.h" void pausa(); int main(int argc, char *argv[]) { if(SDL_Init(SDL_INIT_VIDEO) == -1) { fprintf(stderr,"Erro ao inciar a SDL"); exit(EXIT_FAILURE); } SDL_Surface *tela = NULL; tela = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_DOUBLEBUF); if(tela == NULL) { fprintf(stderr, "Não foi possivel carregar o VideoMode : %s\n", SDL_GetError()); std::cout<<"Não foi possivel carregar o VideoMode : " << SDL_GetError()<<std::endl; exit(EXIT_FAILURE); } std::cout<<"VideoMode ok"<<std::endl; SDL_WM_SetCaption("Test SDL",NULL); SDL_FillRect(tela,NULL,SDL_MapRGB(tela->format,100,0,0)); SDL_Flip(tela); pausa(); SDL_Quit(); return EXIT_SUCCESS; } void pausa() { bool continuar = true; std::cout<<"pausa"<<std::endl; SDL_Event *evento = new SDL_Event; while(continuar) { std::cout<<"continuar"<<std::endl; SDL_WaitEvent(evento); std::cout<<"evento"<<std::endl; switch(evento->type) { case SDL_QUIT: std::cout<<"quit"<<std::endl; continuar = false; break; case SDL_KEYDOWN : switch(evento->key.keysym.sym) { case SDLK_ESCAPE: std::cout<<"Escape pressed"<<std::endl; continuar = false; break; default : break; } default : break; } } }
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.