<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>bitmap NullPtr exeption </title>
		<link>http://www.allegro.cc/forums/view/617696</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 15 Jan 2019 03:33:45 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello everyone, i hope someone can help me with this issue. Since i´m trying to return my pointer to my bitmap, i get a Nullptr. When the bitmap pionter was in main, everything worked fine. The bitmaps are in the right location. I was able to see in the debugger, that at the time were the pointer is looking for the bitmap, it works. But as soon as the method ALLEGRO_BITMAP* player::get_playeridle(void) is started, the momory becomes a nullpointer. I am new at programming with allegro 5, is there anything i ´m just to blind so see?</p><p>MAIN:<br />#include &lt;allegro5/allegro.h&gt;<br />#include &lt;allegro5/allegro_native_dialog.h&gt;<br />#include &lt;iostream&gt;<br />#include &lt;allegro5/allegro_image.h&gt;<br />#include &quot;player.h&quot;<br />#define ScreeenWidth 1024<br />#define ScreenHeight 700<br />int main()<br />{<br />	const int FPS = 60;</p><p>	enum Direction { DOWN, LEFT, RIGHT, UP };</p><p>	player* objplayer;<br />	objplayer = new player;</p><p>	if (!al_init()) {<br />		al_show_native_message_box(NULL, NULL, NULL, &quot;klapp net&quot;, NULL, NULL);<br />		return -1;<br />	}<br />	al_set_new_display_flags(ALLEGRO_WINDOWED);<br />	ALLEGRO_DISPLAY *display = al_create_display(ScreeenWidth, ScreenHeight);<br />	al_set_window_position(display, 200, 100);</p><p>	bool done = false;<br />	bool draw = true;<br />	bool active = false;<br />	int x = 10, y = 10, sourceX = 0, sourceY = 0;<br />	int moveSpeed = 5;<br />	int dir = DOWN;<br />	int animation = 0;</p><p>	al_install_keyboard();<br />	al_install_mouse();<br />	al_init_image_addon();</p><p>	ALLEGRO_BITMAP *tilemap;<br />	tilemap = al_create_bitmap(ScreeenWidth, ScreenHeight);</p><p>	ALLEGRO_KEYBOARD_STATE keyState;<br />	ALLEGRO_COLOR electricBlue = al_map_rgb(44, 117, 255);<br />	ALLEGRO_TIMER *timer = al_create_timer(1.0 / FPS);<br />	ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue();<br />	al_register_event_source(event_queue, al_get_keyboard_event_source());<br />	al_register_event_source(event_queue, al_get_timer_event_source(timer));<br />	al_register_event_source(event_queue, al_get_display_event_source(display));<br />	al_register_event_source(event_queue, al_get_mouse_event_source());</p><p>	al_start_timer(timer); // nachd dem timer nichts initialieren, hier sollte nur der gameloop folgen</p><p>	while (!done) {<br />		ALLEGRO_EVENT events;<br />		al_wait_for_event(event_queue, &amp;events);</p><p>		if (events.type == ALLEGRO_EVENT_KEY_UP) {<br />			switch (events.keyboard.keycode) {</p><p>			case ALLEGRO_KEY_ESCAPE:<br />				done = true;<br />				break;<br />			}<br />		}<br />		else if (events.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {<br />			done = true;<br />		}<br />		else if (events.type == ALLEGRO_EVENT_MOUSE_AXES) {<br />			x = events.mouse.x;<br />			y = events.mouse.y;<br />		}<br />		if (events.type == ALLEGRO_EVENT_TIMER) {<br />			active = true;<br />			al_get_keyboard_state(&amp;keyState);<br />			if (al_key_down(&amp;keyState, ALLEGRO_KEY_DOWN)) {<br />				y += moveSpeed;<br />				dir = DOWN;<br />			}<br />			else if (al_key_down(&amp;keyState, ALLEGRO_KEY_UP)) {<br />				y -= moveSpeed;<br />				dir = UP;<br />			}<br />			else if (al_key_down(&amp;keyState, ALLEGRO_KEY_RIGHT)) {<br />				x += moveSpeed;<br />				dir = RIGHT;<br />			}<br />			else if (al_key_down(&amp;keyState, ALLEGRO_KEY_LEFT)) {<br />				x -= moveSpeed;<br />				dir = LEFT;<br />			}</p><p>			else<br />				active = false;</p><p>			sourceY = dir;<br />			animation = y % 20;<br />			draw = true;<br />		}</p><p>		if (draw) {</p><p>			if (dir == LEFT&amp;&amp;active) {<br />			al_draw_bitmap_region(objplayer-&gt;get_playeridle(), sourceX, sourceY, al_get_bitmap_width(objplayer-&gt;get_playeridle()) / 3, al_get_bitmap_height(objplayer-&gt;get_playeridle()), x, y, NULL);<br />			}<br />			if (dir == RIGHT&amp;&amp;active) {<br />			al_draw_bitmap_region(objplayer-&gt;get_playeridle(), al_get_bitmap_width(objplayer-&gt;get_playeridle()) / 3*2, sourceY, al_get_bitmap_width(objplayer-&gt;get_playeridle()) / 3, al_get_bitmap_height(objplayer-&gt;get_playeridle()), x, y, NULL);<br />			}<br />			if (dir == UP&amp;&amp;active) {<br />			al_draw_bitmap_region(objplayer-&gt;get_playerfly(), sourceX + al_get_bitmap_width(objplayer-&gt;get_playerfly()) / 3, al_get_bitmap_height(objplayer-&gt;get_playerfly()) / 2*(animation/10), al_get_bitmap_width(objplayer-&gt;get_playerfly()) / 3, al_get_bitmap_height(objplayer-&gt;get_playerfly()) / 2, x, y, NULL);<br />			}<br />			if (dir == DOWN&amp;&amp;active) {<br />			al_draw_bitmap_region(objplayer-&gt;get_playeridle(), sourceX + al_get_bitmap_width(objplayer-&gt;get_playeridle()) / 3, sourceY, al_get_bitmap_width(objplayer-&gt;get_playeridle())/3, al_get_bitmap_height(objplayer-&gt;get_playeridle()), x, y, NULL);<br />			}<br />			else if (active==false) al_draw_bitmap_region(objplayer-&gt;get_playeridle(), sourceX + al_get_bitmap_width(objplayer-&gt;get_playeridle()) / 3, sourceY, al_get_bitmap_width(objplayer-&gt;get_playeridle()) / 3, al_get_bitmap_height(objplayer-&gt;get_playeridle()), x, y, NULL); //Here´s were i get my NullPtr exeption<br />			<br />			draw = false;<br />			al_flip_display();<br />			al_clear_to_color(al_map_rgb(0, 0, 0));<br />		}<br />	}<br />	al_destroy_display(display);<br />	al_destroy_timer(timer);<br />	al_destroy_bitmap(objplayer-&gt;get_playeridle());<br />	al_destroy_bitmap(objplayer-&gt;get_playerfly());<br />	al_destroy_event_queue(event_queue);<br />	return 0;</p><p>}</p><p>PLAYER.H:</p><p>#pragma once<br />#include &lt;allegro5/allegro.h&gt;<br />#include &lt;allegro5/allegro_image.h&gt;<br />class player<br />{<br />private:<br />	ALLEGRO_BITMAP *playerfly;<br />	ALLEGRO_BITMAP *playeridle;<br />public:<br />	player();<br />	~player();<br />	ALLEGRO_BITMAP* get_playeridle(void);<br />	ALLEGRO_BITMAP* get_playerfly(void);<br />};</p><p>PLAYER.cpp:</p><p>#include &quot;player.h&quot;</p><p>player::player()<br />{<br />	playeridle = al_load_bitmap(&quot;..\\source\\playeridle.png&quot;);<br />	playerfly = al_load_bitmap(&quot;..\\source\\playerfly.png&quot;);<br />	ALLEGRO_KEYBOARD_STATE keyState;<br />}</p><p>ALLEGRO_BITMAP* player::get_playeridle(void) {<br />	return playeridle;<br />}<br />ALLEGRO_BITMAP* player::get_playerfly(void) {<br />	return playerfly;<br />}</p><p>player::~player()<br />{<br />}</p><p>i´m pretty desperate for help, please guys:&#39;(</p><p>And thank you very much:D
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (PegasusBogen)</author>
		<pubDate>Tue, 15 Jan 2019 02:19:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Use &lt;code&gt; tags to fix your formatting.</p><p>The issue is that you&#39;re creating your player before initializing allegro.<br />The player&#39;s constructor, which is called before initializing allegro uses the <span class="source-code"><a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a></span> function which should only be used after initializing allegro and creating the display. There&#39;s also a local <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a></span> in your constructor that you aren&#39;t using for anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Tue, 15 Jan 2019 02:35:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It works, thank you very much!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (PegasusBogen)</author>
		<pubDate>Tue, 15 Jan 2019 03:33:45 +0000</pubDate>
	</item>
</rss>
