|
|
Szia,
Köszi, működik
|
|
|
Szia!
Így:
Kód: SDL_Texture* mixed_tex =SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 1024, 512);
SDL_Rect target_rec;
target_rec.w = 1024;
target_rec.h = 512;
target_rec.x = 0;
target_rec.y = 0;
SDL_SetRenderTarget(renderer, mixed_tex); //ezután a renderer a textúrába fog rajzolni
SDL_RenderCopy(renderer, image_1, NULL, &target_rec);
target_rec.x = 512;
target_rec.y = 256;
target_rec.w = 512;
target_rec.h = 256;
SDL_RenderCopy(renderer, image_2, NULL, &target_rec);
SDL_SetRenderTarget(renderer, NULL); //itt visszaállítjuk
A számokat átírod ahogy Neked megfelel. A renderert meg használhatod úgy, ahogy eddig ezután.
|
|
|
[SDL2]
Hali,
Valaki megtudja mondani, hogy tudok 2 db. SDL_Texture-t egybe rakni egy SDL_Textureként?
Pl.:
SDL_Texture* image_1 = NULL;
image_1 = IMG_LoadTexture(renderer, "image_1.png" ) ;
SDL_Texture* image_2 = NULL;
image_2 = IMG_LoadTexture(renderer, "image_2.png" ) ;
SDL_Texture* image_sum = NULL;
/*
És akkor itt kéne valami, hogy ezentúl az image_sum, az legyen a két kép összege, pl.: így: https://prnt.sc/fhd9gl
*/
Előre is köszi a segítséget!
|
|
|
tenyleg nem orult bonyolult (bar azert elsore jopar napig elszenvedtem vele  )
esetleg in-app purchase es reklamok (admob, stb) megvalositasaval van valakinek tapasztalata, esetleg jol hasznalhato tutorialra linkje?
|
|
|
Idézet LBandy :
Az alacsony szintű dolgokat (pl file műveletek, egyéb windows-specifikus dolgok) értelemszerűen mobilosítani kell, ettől eltekintve ha jártas vagy a makefile-ok világában viszonylag gyorsan össze tudod rakni a droidos verziót. Csak ezzel van egyelőre tapasztalatom, projekt mérettől és megfelelő szemléletbeli felépítéstől függően akár egy hétvége alatt meg lehet csinálni. Aztán a mobil-optimalizálás már egy SDL-fől független téma, ugye. 
koszi, ez jol hangzik
windows-specifikus dolgok nalam kizarva, eleve Linuxon fejlesztek, mindent platformfuggetlenul 
jelenleg is kezzel irt MAkefile-t hasznalok, szoval az nem gond
akkor ranezek majd, de eddig eleg biztato
|
|
|
Az alacsony szintű dolgokat (pl file műveletek, egyéb windows-specifikus dolgok) értelemszerűen mobilosítani kell, ettől eltekintve ha jártas vagy a makefile-ok világában viszonylag gyorsan össze tudod rakni a droidos verziót. Csak ezzel van egyelőre tapasztalatom, projekt mérettől és megfelelő szemléletbeli felépítéstől függően akár egy hétvége alatt meg lehet csinálni. Aztán a mobil-optimalizálás már egy SDL-fől független téma, ugye.
|
|
|
Idézet __z :
Announcing SDL 2.0.0
arrol van valakinek tapasztalata hogy kesz, desktopon (windows, linux, stb) mukodo SDL2.0-s project mekkora energiabefektetessel portolhato Androidra/iPhone-ra?
azt latom hogy maga az SDL tamogatja, de mennyire kell belenyulkalni, atirkalni?
|
|
|
|
Ki akarom szamolni egy surface pixel arrayenek a meretet.
A
Kód: surface->format->BytesPerPixel * vicc * heisz * sizeof(unsigned char)
mindig jo?
|
|
|
Jaja, én is valami ilyesmire gondoltam és így elméletileg nem lesz gond vele. De mondom, thread kezelésben (még) nagyon nem vagyok otthon. (De hát mit várunk egy főállású píéjcspí programozótól  , sémmi szál nincs a munkaidőben, max. process)
|
|
|
Igen, tudom, hogy megnezhetnem, ezert irtam, hogy de  (mivel lusta vagyok hozza.) A linket koszi, megnezem.
Amit szeretnek egyebkent, az az, hogy a controller mainloop elkapja az SDL eventet, aztan wrappolja es bedobja az eventdispatch queueba, ami mar aszinkron kuldene a feldolgozast.
Ezt a hozzászólást zeller módosította (2012.02.10 15:57 GMT+1 óra, ---)
|
|
|
Ennyire nem vagyok benne, de ezen topik alapján azt mondanám, hogy lehet, viszont a grafika és az esemény kezelés (low level része) a Main thread-be kerüljön (ahol az SDL-t is inicializáltad).
Egyébként a forrását simán megnézheted.
|
|
|
Bar megnezhetnem az sdl forrasat de.
Az esemenykezeles kulon szalon fut?
Ha multithreaded alkalmazast akarok csinalni, akkor kotelezo sdl threadeket hasznalnom, hogy hasznalhatok qt/boost/c++11 vagy barmilyen mas threadeket is?
|
|
|
Nem tudja valaki,hogy Macen (10.6) hol van az SDL Framework? Azt olvastam vhol, hogy lehet frameworkkent is linkelni.
|
|
|
Valójában a készítők ezt nem gondolják hibának, mert ha néhány DLL fájlt is bemásolsz a kész exe programod mellé, akkor már más gépeken is fog működni. Viszont ez a hiba nálam pl azt okozta, hogy csináltam egy programot, amit a régi mingw fordítoval fordítottam. Majd kértek egy új funkciót a programomba, megcsináltam, de akkor már az új mingw volt a gépemen. Leteszteltem, működött. Elküldtem a felhasználónak, és ott nem működött. Szóvak nagy szívás. A régi mingw nem igényelt DLL fájlokat, az új viszont igényel.
Idézet easy82 :
Idézet barack1 :
Ez a fordító, sokkal több warning üzenetet küld, mint a korábbi, viszont van egy sújos hibája. Ha készítesz vele egy programot, akkor az más gépre másolva nem fog elindulni. Ha ezt el akarod kerülni, akkor a "Project/Build options..." menüt választva a "Linker settings/Other link options" -hoz írd be a "-static-libgcc -static-libstdc++" opciókat a debug és a release opciók közé is.
Jesszus, ezt nem modnod, hogy adhatták így ki?? Én is masználok MinGW-t, de nekem még az van ami a 10.05-ös C::B-vel jön.
|
|
|
@barack1: kösz ezt nem tudtam, viszont szerintem robee00-nak akartad címezni, én jelenleg is C::B-ot használok
@easy82: igen, a delay a lényeg.
|
|
|
Idézet barack1 :
Ez a fordító, sokkal több warning üzenetet küld, mint a korábbi, viszont van egy sújos hibája. Ha készítesz vele egy programot, akkor az más gépre másolva nem fog elindulni. Ha ezt el akarod kerülni, akkor a "Project/Build options..." menüt választva a "Linker settings/Other link options" -hoz írd be a "-static-libgcc -static-libstdc++" opciókat a debug és a release opciók közé is.
Jesszus, ezt nem modnod, hogy adhatták így ki?? Én is masználok MinGW-t, de nekem még az van ami a 10.05-ös C::B-vel jön.
|
|
|
@gopher
szia,
if (screen = NULL)
{
return 1;
}
erre a kódrészre az aktuális mingw fodítók adnak egy warning üzenetet.
Ha a codeblocks honlapról töltöd le a mingw -t is akkor az egy régi verzió, az még nem jelzett warningot.
Szerintem ha a jövőben még próbálgatod a codeblocks -ot, akkor töltsd le a legfrissebb mingw fordítót innen: http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/mingw-get-inst-20110802/
Ez a fordító, sokkal több warning üzenetet küld, mint a korábbi, viszont van egy sújos hibája. Ha készítesz vele egy programot, akkor az más gépre másolva nem fog elindulni. Ha ezt el akarod kerülni, akkor a "Project/Build options..." menüt választva a "Linker settings/Other link options" -hoz írd be a "-static-libgcc -static-libstdc++" opciókat a debug és a release opciók közé is.
|
|
|
Az "SDL_Delay( 1 );"-en van a hangsúly, vagy a kód többi részén? Csak mert amilyen 3D-s engine-eket én használtam, ha jól emlékszem, mindnél így kellett (mármint a delay) hogy a Windows is lélegzethez jusson. Legutoljára az Irrlicht-es programjaimnál én így csináltam. Ez amúgy szerintem nem az SDL vagy a többi grafikus könyvtár hibája.
|
|
|
@bolyzsolt: jó kérdés. Egyelőre most így hagyom, de majd még utána nézek, én jelenleg ezt a megoldást találtam
|
|
|
@gopher: ezt biztos csak így lehet megoldani? Ugyan már rég használtam SDL-t, de Allegro-ban pl. meg van rendesen oldva, hogy az eseménykezelés ne egye meg a procit, azaz ne várjon az eseményekre, hanem minden ciklusban dobja be őket a memóriába és utána onnan lehessen feldolgozni őket, az esemény típusától függően.
|
|
|
Csak széljegyzetként ide tenném:
Ha mást is idegesít, hogy az SDL megeszi a CPU 100%-át (több magos esetén egy magot teljesen), itt egy érdekes megoldás (nálam működik) :
Kód: while ( running )
{
SDL_Delay( 1 );
time = device->getTime();
if ( old_time + 20 > time ) continue;
old_time = time;
// ... játék logika
}
Ez most fix framerate-es, de nem az a lényeg. 100%-ról 20%-ra eset vissza a proci használat ...
Ezt a hozzászólást gopher módosította (2011.10.23 05:16 GMT+1 óra, ---)
|
|
|
[off]hát először amit néztem tutorialt abba codeblocksba mutatták, aztán találtam meg a lazyfoo-sat, de ottmár van VC++-s is, csak gondoltam hamár fent van akkor próbáljuk meg azt. de szerintem megcsinálom VC++-be, csak könnyebb  [/off]
|
|
|
@robee00: semmi gond  ilyet bárki elnézhet.
[off]Egyébként hogyhogy hanyagolod a Visual C-t? Mármint ha azt megszoktad, szerintem inkább azt használd.[/off]
|
|
|
@gopher jaj, ez elég gázos volt  elnéztem őket. megszoktam már hogy visual c++ba mindig kiírja ha valamit nem jól írok. megkell még szokni a c::b-t
|
|
|
Üdv!
Kód: if (screen = NULL)
{
return 1;
}
Itt == legyen, különben rögtön kilép.
Ez pedig sosem fog visszatérni 1-gyel:
Kód: if(SDL_Flip(screen) == 1)
{
return 1;
}
Legalábbis a dokumentáció szerint.
A load_image függvénynél az első if-nek nincs else ága. Érdemes betenni, hogy lásd, ha nem sikerül betöltenie a képet.
|
|
|
Elkezdtem csinálni SDL-s tutorokat, felraktam a Code::Blocksot, fent van az sdk, mingw,gcc legfrisebb, és van ez a kódom:
Kód: #include "SDL/SDL.h"
#include <string>
SDL_Surface *load_image(std::string filename)
{
//Temporary storage for image that's loaded
SDL_Surface* loadedImage = NULL;
//Optimized image
SDL_Surface* optimizedImage = NULL;
//Load the image
loadedImage = SDL_LoadBMP(filename.c_str() );
if(loadedImage != NULL)
{
//Create optimized image
optimizedImage = SDL_DisplayFormat(loadedImage);
//Free the old image
SDL_FreeSurface(loadedImage);
}
//Return optimizedImage
return optimizedImage;
}
void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
//make temporary rectangle to hold the offsets
SDL_Rect offset;
//sets the offsets
offset.x = x;
offset.y = y;
//Blit the surface
SDL_BlitSurface(source, NULL, destination, &offset);
}
int main( int argc, char* args[] )
{
//Screen attributes
const int SCREEN_WIDTH = 1280;
const int SCREEN_HEIGHT = 720;
const int SCREEN_BPP = 32;
//Surfaces
SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;
//Initialize SDL
if (SDL_Init(SDL_INIT_EVERYTHING) == 1)
{
return 1;
}
//Set up screen
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
//If there was an error in setting up the screen
if (screen = NULL)
{
return 1;
}
//Set window's title/caption
SDL_WM_SetCaption("Tutorial", NULL);
//Load the image
message = load_image("hello.bmp");
background = load_image("bg.bmp");
//Apply bg to screen
apply_surface(0,0,background,screen);
apply_surface(640,0,background,screen);
apply_surface(0,360,background,screen);
apply_surface(640,360,background,screen);
//apply message to screen
apply_surface(180,140,message,screen);
//Update screen
if(SDL_Flip(screen) == 1)
{
return 1;
}
//Wait 2 sec
SDL_Delay(2000);
//Free surface
SDL_FreeSurface(message);
SDL_FreeSurface(background);
//Quit SDL
SDL_Quit();
return 0;
}
ha elindítom a progit, akkor felvillan az ablak és egy hibaüzit kapok:
"Process terminated with status 3."
|
|
|
Más is belefutott már abba a problémába, hogy a keysym.unicode-ban rossz érték van (csak az egyik byte értéke)? Ki lehet ezt valahogyan kerülni (például saját fordítással)?
|
|
|
Szidzsi
Hello!
Nem vagyok valami jártas SDL-ben, de a probléma valóban a VC++ban lesz, mégpedig
megnyitod a projectet vc++ban, jobb klikk bal oldalt a projekt nevére, Properties, Configuration Properties, C/C++, Code Generation és a Runtime Library-t próbáld meg átállítani sima multi-threadedre, majd a release verziót build-eld és kész
ha ezt értetted az alatt hogy minden be van állítva a projektben akkor nem szóltam
Köszönöm az infót, nem tudtam hogy releasbe kell, de sajnos csak úgy engedi buildolni ha a Runtime Library -t multi-threaded DLL(/MD) -én hagyom. Ha muti-threaded(/MT) -re állítom akkor kidob pár error-t és nem fordítja le release-be. Úgyhogy ennek talán itt vége is, mivelhogy tényleg c++ és nem SDL probléma.
|
|
|
Idézet clarDrum :
Üdv mindenkinek
Új vagyok itt, SDL-el ismerkedem Visual C++ban és készítettem egy szerény 2D játékot. Azt szeretném megkérdezni, hogy lehet elindítani a gámát más gépeken is? Áttettem egy másik gépre, rákattintottam, és rögtön egy üzenetet dobott fel: "Az alkalmazást nem sikerült elindítani mert a konfigurációja helytelen, az alkalmazás újratelepítése megoldhatja a problémát". Nem tudja valaki hogy ez miért van? Minden szükséges DLL, fájlok ott vannak az exe mellett, elvileg minden be van állítva a project-ben. Mi kell ahhoz hogy más gépeken is ellehessen indítani?? Kell valami plusz DLL neki esetleg? Neten utánanéztem, de konkrét választ nem találtam.
Ha valaki tud segíteni, megköszönöm.
Hello!
Nem vagyok valami jártas SDL-ben, de a probléma valóban a VC++ban lesz, mégpedig
megnyitod a projectet vc++ban, jobb klikk bal oldalt a projekt nevére, Properties, Configuration Properties, C/C++, Code Generation és a Runtime Library-t próbáld meg átállítani sima multi-threadedre, majd a release verziót build-eld és kész
ha ezt értetted az alatt hogy minden be van állítva a projektben akkor nem szóltam
|
|
|
Idézet clarDrum :
senki se találkozott ezzel a problémával? 
ime
|
|
|
senki se találkozott ezzel a problémával?
|
|
|
Idézet clarDrum :
Üdv mindenkinek
Új vagyok itt, SDL-el ismerkedem Visual C++ban és készítettem egy szerény 2D játékot. Azt szeretném megkérdezni, hogy lehet elindítani a gámát más gépeken is? Áttettem egy másik gépre, rákattintottam, és rögtön egy üzenetet dobott fel: "Az alkalmazást nem sikerült elindítani mert a konfigurációja helytelen, az alkalmazás újratelepítése megoldhatja a problémát". Nem tudja valaki hogy ez miért van? Minden szükséges DLL, fájlok ott vannak az exe mellett, elvileg minden be van állítva a project-ben. Mi kell ahhoz hogy más gépeken is ellehessen indítani?? Kell valami plusz DLL neki esetleg? Neten utánanéztem, de konkrét választ nem találtam.
Ha valaki tud segíteni, megköszönöm.
ez nem SDL, hanem Visual C++ problema lesz...
|
|
|
Üdv mindenkinek
Új vagyok itt, SDL-el ismerkedem Visual C++ban és készítettem egy szerény 2D játékot. Azt szeretném megkérdezni, hogy lehet elindítani a gámát más gépeken is? Áttettem egy másik gépre, rákattintottam, és rögtön egy üzenetet dobott fel: "Az alkalmazást nem sikerült elindítani mert a konfigurációja helytelen, az alkalmazás újratelepítése megoldhatja a problémát". Nem tudja valaki hogy ez miért van? Minden szükséges DLL, fájlok ott vannak az exe mellett, elvileg minden be van állítva a project-ben. Mi kell ahhoz hogy más gépeken is ellehessen indítani?? Kell valami plusz DLL neki esetleg? Neten utánanéztem, de konkrét választ nem találtam.
Ha valaki tud segíteni, megköszönöm.
|
|
|
én is a c++-t ajánlom, de lehet, hogy free-pascalra is találsz valami kis leírást, asszem free-pascalhoz van példaprogram is
|
|
|
jajj 
az SDL nagyon jo, platformfuggetlen (ellenben a mono meg hasonlo formedvenyekkel), pascalt mar vagy 15 eve nem hasznaltam, de vegul is az SDL fuggvenyeit barmilyen nyelvbol meghivhatod 
en C++/SDL kombot hasznalok platformfuggetlen fejlesztesre, teljesen bevalt (illetve kevesebb platformon fut, de a .net-nel meg mindig legalabb egy nagysagrenddel tobbon a Qt)
|
|
|
Egyre jobb tippek érkeznek.
|
|
|
Hát, hogy az Object Pascal könnyű lenne az ugye csak vicc volt? Akkor már inkább a Mono és az SDL.NET.
|
|
|
 Miért ne?
Freepascal: eccerű
Lazarus: kényelmes
SDL: reményeim szerint a fenti kettő együttvéve (eccerű és kényelmes)
Ubi: ingyenes
Ja, és a fenti három fejlesztői cucc van winfosra is, így az egész akár még többé kevésbé platformfüggetlen is lehet.
Szerk.: "I've already created one game using FPC + Lazarus + JEDI-SDL. And it works very nice. I dont see any problem in using Lazarus for Game Development." Na, ez kellene nekem is!
I, Robot
1. A robotnak nem szabad kárt okoznia emberi lényben.
2. A robot engedelmeskedni tartozik az emberi lények utasításainak.
3. A robot tartozik saját védelméről gondoskodni.
|
|
|
Idézet Elf :
Freepascal+Lazarus+SDL hármast használ valamelyikőtök Ubuntu 10-en? Valami telepítési útmutató kellene. Köszi!
És azt úgy miér'?
|
|
|
Freepascal+Lazarus+SDL hármast használ valamelyikőtök Ubuntu 10-en? Valami telepítési útmutató kellene. Köszi!
I, Robot
1. A robotnak nem szabad kárt okoznia emberi lényben.
2. A robot engedelmeskedni tartozik az emberi lények utasításainak.
3. A robot tartozik saját védelméről gondoskodni.
|
|
|
egy glew vagy glee fog kelleni
|
|
|
És mit kell belinkelni a fordítónak, hogy a BindBufferARB is menjen?
|
|
|
|
Valamilyen package-t kellett frissíteni a gentooban. Kolléga megoldotta
|
|
|
megoldodott, a macports felrakasa okozta a gondot, valoszinuleg valami olyan library-t hasznalt, amit nem kellett volna, a ports lib konyvtaranak atnevezese megoldotta a gondot
Qrvannyatneki
|
|
|
Idézet dothumour :
Szerintem is az lehet, mert ennek működnie kellene.
mukodott is  marmint nem ez, hanem a 'nagy' kod
hirtelenjeben otletem sincs mit kezdjek vele... a furcsa az, hogy minden mas (kirajzolas, stb) teljesen jol mukodik, csak az event kezeles doglott
|
|
|
Idézet glezmen :
eros a gyanum, hogy valami lib-kavaras lesz a dologban.
Szerintem is az lehet, mert ennek működnie kellene.
|
|
|
Kód: #include <iostream>
#include <SDL.h>
int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode(320,240,16,SDL_SWSURFACE);
SDL_Event ev;
std::cout << "- 1 -" << std::endl;
SDL_PollEvent(&ev);
std::cout << "- 2 -" << std::endl;
SDL_Quit();
return 0;
}
Makefile:
1 OS = $(shell uname -s)
2 LIBS = $(shell pkg-config --libs sdl) -lSDL_ttf -lSDL_mixer -lm -lz -lpng -lSDL_image -liconv -lfreetype -lmad
3 INCS = $(shell pkg-config --cflags sdl)
4
5 all:
6 ifeq ($(OS),Darwin)
7 g++ -arch i386 -m32 -o test *.cpp $(LIBS) $(INCS) -framework Cocoa
8 else
9 g++ -Wl,-soname,libsdlgui.so.0 -o test *.cpp $(LIBS) $(INCS)
10 endif
11
12 clean:
13 rm *.o
csinaltam egy rovid tesztprogramot, de ezzel is csinalja, a - 1 - megjelenik, a - 2 - mar nem
eros a gyanum, hogy valami lib-kavaras lesz a dologban, futtataskor ilyen uzenetet kapok:
bash-3.2$ ./test
objc[3496]: Class SDLTranslatorResponder is implemented in both /sw/lib/libSDL-1.2.0.dylib and /Users/nbokor/Projects/tmp/./test. One of the two will be used. Which one is undefined.
objc[3496]: Class SDL_QuartzView is implemented in both /sw/lib/libSDL-1.2.0.dylib and /Users/nbokor/Projects/tmp/./test. One of the two will be used. Which one is undefined.
objc[3496]: Class SDL_QuartzWindowDelegate is implemented in both /sw/lib/libSDL-1.2.0.dylib and /Users/nbokor/Projects/tmp/./test. One of the two will be used. Which one is undefined.
objc[3496]: Class SDL_QuartzWindow is implemented in both /sw/lib/libSDL-1.2.0.dylib and /Users/nbokor/Projects/tmp/./test. One of the two will be used. Which one is undefined.
|
|
|
Idézet glezmen :
valakinek esetleg otlet a PollEvent()-es freeze-re?
Lehet, hogy egy pici kód segítene. Többszálú esetleg a program?
|
|
|
Legújabb project:
Szókirakó 3
Legutóbb frissített project:
Szókirakó 3
Friss kép a galériából:
|