<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Problem with ALLEGRO_FLIP_HORIZONTAL and spritesheet</title>
		<link>http://www.allegro.cc/forums/view/614660</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 22 Sep 2014 19:47:57 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all,</p><p>I&#39;m using a sprite sheet to hold my main players graphics.  The last frame is the sprite for when the player is falling / in air.  My code checks the direction of the player and flips the bitmap accordingly.  However when flipping the frame for falling, the x location where the player is drawn gets flipped as well.  Example, the frame on the sprite sheet starts at x = 102, and y = 0.  When facing right (unflipped) the sprite draws at the correct location (the players x location).  When facing left (the sprite is flipped) the sprite draws at the x location + 102.  I feel like I have had this problem before and can&#39;t remember how it was fixed.  I know I can just make a separate frame, and I will if I need to, but I&#39;m curious what could be causing this.  Anyone have any suggestions?  My code is below:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>
<span class="number">   2</span><span class="p">#define P_FALL_X      102</span>
<span class="number">   3</span><span class="p">#define P_FALL_Y      0</span>
<span class="number">   4</span><span class="p">#define P_FALL_W      133</span>
<span class="number">   5</span><span class="p">#define P_FALL_H      32</span>
<span class="number">   6</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">void</span> player::load_graphics<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> file_name<span class="k2">)</span>
<span class="number">   9</span><span class="k2">{</span>
<span class="number">  10</span>  graphics <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>file_name<span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span>  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>graphics,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span>  
<span class="number">  15</span>  g_standing <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_STAND_X,P_STAND_Y,P_STAND_W,P_STAND_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</span>  g_st <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_STAND_X,P_STAND_Y,P_STAND_W,P_STAND_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span>  g_falling <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_FALL_X,P_FALL_Y,P_FALL_W,P_FALL_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>  
<span class="number">  20</span>  g_walking<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_WALK1_X,P_WALK1_Y,P_WALK1_W,P_WALK1_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>  g_walking<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_WALK2_X,P_WALK2_Y,P_WALK2_W,P_WALK2_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>  g_walking<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_WALK3_X,P_WALK3_Y,P_WALK3_W,P_WALK3_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>  g_walking<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>graphics,P_WALK4_X,P_WALK4_Y,P_WALK4_W,P_WALK4_H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>
<span class="number">  25</span>  curFrame <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  26</span><span class="k2">}</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="k1">void</span> player::draw_player<span class="k2">(</span><span class="k2">)</span>
<span class="number">  29</span><span class="k2">{</span>
<span class="number">  30</span>  <span class="k1">int</span> x_adjust <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  31</span>  <span class="k1">int</span> y_adjust <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  32</span>
<span class="number">  33</span>  x_adjust <span class="k3">=</span> P_STAND_W <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>curFrame<span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>  <span class="k1">if</span> <span class="k2">(</span>x_adjust <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  36</span>    x_adjust <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span>  <span class="k1">if</span><span class="k2">(</span>jumping<span class="k2">)</span>
<span class="number">  39</span>    x_adjust <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  40</span>
<span class="number">  41</span>  <span class="k1">if</span><span class="k2">(</span>d_y <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  42</span>  <span class="k2">{</span>
<span class="number">  43</span>    y_adjust <span class="k3">+</span><span class="k3">=</span> d_y<span class="k2">;</span>
<span class="number">  44</span>  <span class="k2">}</span>
<span class="number">  45</span>
<span class="number">  46</span>  <span class="k1">if</span><span class="k2">(</span>is_facing <span class="k3">=</span><span class="k3">=</span> LEFT<span class="k2">)</span>
<span class="number">  47</span>  <span class="k2">{</span>
<span class="number">  48</span>    <span class="c">//al_draw_bitmap_region(graphics,d_x,d_y,d_w,d_h,(x + x_adjust),(y+y_adjust),ALLEGRO_FLIP_HORIZONTAL);</span>
<span class="number">  49</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>curFrame,<span class="k2">(</span>x <span class="k3">+</span> x_adjust<span class="k2">)</span>,<span class="k2">(</span>y <span class="k3">+</span> y_adjust<span class="k2">)</span>,ALLEGRO_FLIP_HORIZONTAL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    
<span class="number">  51</span>  <span class="k2">}</span>
<span class="number">  52</span>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>is_facing <span class="k3">=</span><span class="k3">=</span> RIGHT<span class="k2">)</span>
<span class="number">  53</span>  <span class="k2">{</span>
<span class="number">  54</span>    <span class="c">//al_draw_bitmap_region(graphics,d_x,d_y,d_w,d_h,(x + x_adjust),(y+y_adjust),0);</span>
<span class="number">  55</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>curFrame,<span class="k2">(</span>x <span class="k3">+</span> x_adjust<span class="k2">)</span>,<span class="k2">(</span>y <span class="k3">+</span> y_adjust<span class="k2">)</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>  <span class="k2">}</span>
<span class="number">  57</span><span class="k2">}</span>
<span class="number">  58</span>
<span class="number">  59</span><span class="k1">void</span> player::set_curFrame<span class="k2">(</span><span class="k2">)</span>
<span class="number">  60</span><span class="k2">{</span>
<span class="number">  61</span>  <span class="k1">if</span><span class="k2">(</span>velx <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  62</span>  <span class="k2">{</span>
<span class="number">  63</span>    curFrame <span class="k3">=</span> g_st<span class="k2">;</span>
<span class="number">  64</span>    frame <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  65</span>  <span class="k2">}</span>
<span class="number">  66</span>  <span class="k1">else</span>
<span class="number">  67</span>  <span class="k2">{</span>
<span class="number">  68</span>    frame<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  69</span>    <span class="k1">if</span><span class="k2">(</span>frame <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number">  70</span>    <span class="k2">{</span>
<span class="number">  71</span>      <span class="k1">if</span><span class="k2">(</span>frame <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">)</span>
<span class="number">  72</span>      <span class="k2">{</span>
<span class="number">  73</span>        curFrame <span class="k3">=</span> g_walking<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  74</span>      <span class="k2">}</span>
<span class="number">  75</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>frame <span class="k3">&lt;</span> <span class="n">10</span><span class="k2">)</span>
<span class="number">  76</span>      <span class="k2">{</span>
<span class="number">  77</span>        curFrame <span class="k3">=</span> g_walking<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  78</span>      <span class="k2">}</span>
<span class="number">  79</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>frame <span class="k3">&lt;</span> <span class="n">15</span><span class="k2">)</span>
<span class="number">  80</span>      <span class="k2">{</span>
<span class="number">  81</span>        curFrame <span class="k3">=</span> g_walking<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  82</span>      <span class="k2">}</span>
<span class="number">  83</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>frame <span class="k3">&lt;</span> <span class="n">20</span><span class="k2">)</span>
<span class="number">  84</span>      <span class="k2">{</span>
<span class="number">  85</span>        curFrame <span class="k3">=</span> g_walking<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  86</span>      <span class="k2">}</span>
<span class="number">  87</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>frame <span class="k3">&lt;</span> <span class="n">25</span><span class="k2">)</span>
<span class="number">  88</span>      <span class="k2">{</span>
<span class="number">  89</span>        frame <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  90</span>      <span class="k2">}</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>  <span class="k2">}</span>
<span class="number">  93</span>  <span class="k1">if</span><span class="k2">(</span>jumping <span class="k3">|</span><span class="k3">|</span> lockjump <span class="k3">|</span><span class="k3">|</span> is_falling<span class="k2">)</span>
<span class="number">  94</span>  <span class="k2">{</span>
<span class="number">  95</span>    curFrame <span class="k3">=</span> g_falling<span class="k2">;</span>
<span class="number">  96</span>  <span class="k2">}</span>
<span class="number">  97</span><span class="k2">}</span>
</div></div><p>

Also, I tried removing the parts in the draw function where x_adjust is set, changing it so x_adjust is always = 0, and this didn&#39;t change anything.  Any suggestions or ideas would be welcome.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (V T)</author>
		<pubDate>Fri, 19 Sep 2014 23:12:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I assume something is wrong with the x coordinate of player? Perhaps debgugging o a few printfs could clarify this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 22 Sep 2014 09:09:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t look very closely at it, but it seems to me that line 33 should be:
</p><div class="source-code snippet"><div class="inner"><pre>x_adjust <span class="k3">=</span> P_STAND_W <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>curFrame<span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Mon, 22 Sep 2014 11:03:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Shouldn&#39;t they both be divided by 2? To center the player?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 22 Sep 2014 19:47:57 +0000</pubDate>
	</item>
</rss>
