Sign in to follow this  
Lempface

Passing a string into an load_bitmap() [Allegro]

Recommended Posts

If I was writing a game engine and wanted to be able to load custom sprites how could I pass it to the load_bitmap() function? i.e. void GameEngine::Get_Sprites( ~Pass a String~ ) { BITMAP *~passed string~ = load_bitmap("~passed string~.EXTENSION", NULL); } Or maybe there is a better way? Thanks :) I guess what is confusing me are those quote marks.

Share this post


Link to post
Share on other sites
Your load_bitmap() function would accept the filename as an argument. I would reccomend putting these such utility functions in a header file, so if you want to use it then you can just call the header. So when you declare your function in the header: void load_bitmap(std::string filename). Then define this function in the cpp. So when you want to load a bitmap, just type: (type your variable)=load_bitmap("test.bmp");

Share this post


Link to post
Share on other sites
That assumes hardcoding though.

Say I set this up.

ex of output.

"What file would you like to display?"
_
Repsonse = title
What is the files extension?
_
response = .bmp
_
~display title.bmp~

I want something like.

void GameEngine::Get_Sprites(std::string1, std::string2) {
BITMAP *std::string1 = load_bitmap("std::string1, std::string2", NULL);
}

Share this post


Link to post
Share on other sites
Is your problem that you need to pass a character array to load_bmp instead of a string? Because that's what the c_str() function does to strings. So you can do this:

std::string userInput;
cout << "Please enter the filename (with extension) to load: ";
cin >> userInput;
BITMAP* map = load_bmp(userInput.c_str(), NULL);

I'm not especially familiar with using bitmaps, so my syntax may be off. I'm also not certain what your "Get_Sprites" function is supposed to do. What are its arguments? It evidently doesn't return anything because it's a void function, so what does it do?

Share this post


Link to post
Share on other sites
From what i see, the OP tries to create new variables at runtime
Quote:

void GameEngine::Get_Sprites(std::string1, std::string2) {
BITMAP *std::string1 = load_bitmap("std::string1, std::string2", NULL);
}

noticed the std::string1 ?
it is impossible to create new named variables at runtime like this. The only thing i know that could do what you want is using an
std::map<std::string, BITMAP *>


more on std::map (msdn.microsoft.com)

hope that helps !
matchu

Share this post


Link to post
Share on other sites
ah, I get what that function does now thank you.

the function would load my bitmaps at the initialization of the program and allow me to load more at a later time if wanted.. or reuseable code.

for instance.. let me see if i have this understood.


class GameEngine {
private:
std::string file_name;
std::string file_ext;
std::string concat;
public:
void Get_Sprites(std::string file_name, std::string file_ext);
};

extern GameEngine geC;






void GameEngine::Get_Sprites(std::string file_name, std::string file_ext) {
BITMAP *file_name.c_str();
~need to concatenate file_name + "." + file_ext~
file_name.c_str() = load_bitmap(concat.c_str(), NULL);
}





usage:

std::string files[40];
std::string ext = "bmp";

int n = 39;
for(n;n>-1;n--)
{
geC.Get_Sprites(files[n], ext);
}





Well.. I thought I knew where I was going but I don't understand stdlib string functions very well. How would I go about concatenating them?

Well anyway that is the idea of the function.

Share this post


Link to post
Share on other sites
file_name.c_str() = load_bitmap(concat.c_str(), NULL);
c_str() returns a constant value, not a variable you can assign to. First and foremost, your code is incorrect C++, so whatever you're doing, let's get it in general terms and then code the algorithm from there, because what you've got now is just plain flat-out impossible. You can assign to file_name, but not file_name.c_str(). The filename usually already has the file extension on it, but if you really need to add it, it's just file_name += ".bmp".

If you want to be able to load bitmaps and remember their filenames as well to display them, you could make a class consisting of a bitmap pointer and a string. You could also make a std::vector or std::list of them if you plan on creating a variable number of them on the fly. You could also store them in a std::map, using the filename for a key and the bitmap for the value. It all works, depending on what exactly you're driving at. But the above posters are correct; you can't just make new variables at runtime. That's what arrays and (better yet) container classes are for.

[shameless plug]
Here, read these.

http://pixwiki.bafsoft.com/mags/5/articles/stl/part1.html
http://pixwiki.bafsoft.com/mags/6/articles/stl2/part1.html
http://pixwiki.bafsoft.com/mags/8/articles/stl3/stl3.html
http://pixwiki.bafsoft.com/mags/8/articles/strings/page01.html

[/shameless plug]

Share this post


Link to post
Share on other sites
So more like..


class GameEngine {
private:
std::string file_name;
std::string file_ext;
std::string concat;
BITMAP *spritesbmp[40];
int n1;
public:
void Get_Sprites(std::string file_name, std::string file_ext, int n1);
};

extern GameEngine geC;








void GameEngine::Get_Sprites(const std::string &file_name,const std::string &file_ext, int &n1) {
concat = file_name + "." + file_ext;
spritesbmp[n1] = load_bitmap(concat.c_str(), NULL);
}







std::string files[40];
std::string ext = "bmp";

int n = 0;
for(n;n<40;n++)
geC.Get_Sprites(files[n], ext, n);








[Edited by - Lempface on June 7, 2006 6:54:55 PM]

Share this post


Link to post
Share on other sites
not 100% sure that std::string overloads the + operator but if it does, yes that's fine. if not, use the .append method.

also pass your strings by const reference, not by value. That's can be a lot of data to copy around. i.e.:

void Get_Sprites(const std::string &file_name, const std::string &file_ext, int n1);

-me

Share this post


Link to post
Share on other sites
Edited above code to include passing by const ref.. how does it look now?

Quote:
Original post by Palidine
not 100% sure that std::string overloads the + operator but if it does, yes that's fine. if not, use the .append method.

also pass your strings by const reference, not by value. That's can be a lot of data to copy around. i.e.:

void Get_Sprites(const std::string &file_name, const std::string &file_ext, int n1);

-me


haha, didn't see ya did that too.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this