<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>I need help with my text drawing function</title>
		<link>http://www.allegro.cc/forums/view/614013</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 16 Mar 2014 10:53:33 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay Im making a Zelda clone, and Im trying to implement that iconic Zelda text box style. You know where it makes a small beep with each letter?<br />Any ways here is my code </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="c">//Draw text function</span>
<span class="number">  3</span><span class="k1">void</span> drawText<span class="k2">(</span><span class="k1">char</span> text<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number">  4</span><span class="k2">{</span>
<span class="number">  5</span>  <span class="c">//Get the size of the text</span>
<span class="number">  6</span>  <span class="k1">int</span> n <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  <span class="c">//Should the program draw the text on screen?</span>
<span class="number">  9</span>  <span class="k1">if</span><span class="k2">(</span>drawingtext<span class="k2">)</span>
<span class="number"> 10</span>  <span class="k2">{</span>
<span class="number"> 11</span>    <span class="c">//Now draw each letter in the char array</span>
<span class="number"> 12</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> n<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 13</span>    <span class="k2">{</span>
<span class="number"> 14</span>      <span class="c">//Draw the letter</span>
<span class="number"> 15</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <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">255</span>, <span class="n">255</span><span class="k2">)</span>, x, y, NULL, text<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>      <span class="c">//Play the beep</span>
<span class="number"> 18</span>      <a href="http://www.allegro.cc/manual/al_play_sample_instance"><span class="a">al_play_sample_instance</span></a><span class="k2">(</span>beepInstance<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>      <span class="c">//Rest the program</span>
<span class="number"> 21</span>      <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>    <span class="k2">}</span>
<span class="number"> 23</span>  <span class="k2">}</span>
<span class="number"> 24</span>  <span class="k1">else</span>
<span class="number"> 25</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
</div></div><p>


My problem is in the function al_draw_text(), how do I draw each piece of char array at a time, rather than all of it? I want use text[i] as my parameter instead of just text. What should I do?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ISDcaptain)</author>
		<pubDate>Wed, 12 Mar 2014 09:30:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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="c">//Draw text function</span>
<span class="number">  2</span> <span class="k1">void</span> drawText<span class="k2">(</span><span class="k1">char</span> text<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number">  3</span> <span class="k2">{</span>
<span class="number">  4</span>  <span class="c">//Get the size of the text</span>
<span class="number">  5</span>  <span class="k1">int</span> n <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>text<span class="k2">)</span><span class="k2">;</span> 
<span class="number">  6</span> 
<span class="number">  7</span>  <span class="c">//Should the program draw the text on screen?</span>
<span class="number">  8</span>  <span class="k1">if</span><span class="k2">(</span>drawingtext<span class="k2">)</span>
<span class="number">  9</span>  <span class="k2">{</span>
<span class="number"> 10</span>    <span class="k1">char</span> s<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="n">0</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> px <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 12</span>  
<span class="number"> 13</span>    <span class="c">//Now draw each letter in the char array</span>
<span class="number"> 14</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> n<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 15</span>    <span class="k2">{</span>
<span class="number"> 16</span>      <span class="c">//Draw the letter</span>
<span class="number"> 17</span>      <span class="c">//al_draw_text(font, al_map_rgb(255, 255, 255), x, y, NULL, text);</span>
<span class="number"> 18</span>      s<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span>text<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 19</span>      
<span class="number"> 20</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <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">255</span>, <span class="n">255</span><span class="k2">)</span>, px, y, NULL, s<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>      
<span class="number"> 22</span>      px <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,s<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>      
<span class="number"> 24</span>      <span class="c">//Play the beep</span>
<span class="number"> 25</span>      <a href="http://www.allegro.cc/manual/al_play_sample_instance"><span class="a">al_play_sample_instance</span></a><span class="k2">(</span>beepInstance<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>      
<span class="number"> 27</span>      <span class="c">//Rest the program</span>
<span class="number"> 28</span>      <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span>  <span class="k2">}</span>
<span class="number"> 31</span>  <span class="k1">else</span>
<span class="number"> 32</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 12 Mar 2014 09:57:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m not sure that will respect glyph kerning... I&#39;d personally use ALLEGRO_USTR for this:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_USTR_INFO"><span class="a">ALLEGRO_USTR_INFO</span></a> info<span class="k2">;</span>

<span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ref_buffer"><span class="a">al_ref_buffer</span></a><span class="k2">(</span><span class="k3">&amp;</span>info, text, <span class="k2">(</span><span class="k1">size_t</span><span class="k2">)</span>i<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <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">255</span>, <span class="n">255</span><span class="k2">)</span>, x, y, <span class="n">0</span>, ustr<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Note that that will redraw the initial letters every time, so you need to clear the textbox every frame. I certainly would not use <span class="source-code"><a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a></span> like that. Instead, I would increment <span class="source-code">i</span> every 10 ticks or something (and not use a loop). Or, alternatively, I&#39;d pass the start tick and the current tick to the <span class="source-code">drawText</span> function and have it figure out the value of <span class="source-code">i</span> from that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 12 Mar 2014 16:35:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah im running into problems. The beep keeps on going on, and it doesn&#39;t draw each letter one at a time, I don&#39;t know what to do.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ISDcaptain)</author>
		<pubDate>Thu, 13 Mar 2014 08:13:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <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">255</span>, <span class="n">255</span><span class="k2">)</span>, x, y, NULL, <span class="s">"%c"</span>, text<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Thu, 13 Mar 2014 10:42:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Kris - see what SiegeLord said about kerning.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614013/997687#target">ISDcaptain</a> said:</div><div class="quote"><p>Yeah im running into problems. The beep keeps on going on, and it doesn&#39;t draw each letter one at a time, I don&#39;t know what to do. </p></div></div><p>

Create a timer that beats as often as you want your letters to appear. Each time you get a timer event you increment a counter like n. Then when you draw, you draw n out of the total number of letters where n is the number of timer ticks passed since you started it. Each time you get a timer event play the sound. That should solve your problems.</p><p>Draw it like SiegeLord suggested, with <span class="source-code"><a href="http://www.allegro.cc/manual/al_ref_buffer"><span class="a">al_ref_buffer</span></a></span> or <span class="source-code"><a href="http://www.allegro.cc/manual/al_ref_ustr"><span class="a">al_ref_ustr</span></a></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 13 Mar 2014 11:00:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614013/997702#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Kris - see what SiegeLord said about kerning.</p></div></div><p>
*nods* Yeah, for variable width fonts, simply looping through all the characters isn&#39;t going to work very nicely without some extra code, though I thought I&#39;d inject that little bit of code into the conversation as a quick &quot;make it work right now&quot; approach. Refinements can come afterwards. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Thu, 13 Mar 2014 12:28:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay how would I go about doing that with a timer? I don&#39;t know much about them other than how to use them to regulate the FPS.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ISDcaptain)</author>
		<pubDate>Fri, 14 Mar 2014 10:00:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>These should get you started :<br /><a href="http://wiki.allegro.cc/index.php?title=Allegro_5_API_Tutorials">http://wiki.allegro.cc/index.php?title=Allegro_5_API_Tutorials</a><br /><a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Events">http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Events</a><br /><a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Timers">http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Timers</a></p><p>You just need to wait for a timer event, then increment n and play a beep every time you get one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 14 Mar 2014 21:58:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>K I created a timer:</p><p>ALLEGRO_TIMER *textTimer = NULL</p><p>How do I get it to tick with each letter:</p><p>textTimer = al_create_timer(?/?); ??</p><p>I don&#39;t know what to do here.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ISDcaptain)</author>
		<pubDate>Sun, 16 Mar 2014 04:20:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/manual/al_create_timer">The manual</a> said:</div><div class="quote"><p>
al_create_timer</p><p>ALLEGRO_TIMER* al_create_timer(double speed_secs)</p><p>Introduced in 5.0.0</p><p>Install a new timer. If successful, a pointer to a new timer object is returned, otherwise NULL is returned. speed_secs is in seconds per &quot;tick&quot;, and must be positive. The new timer is initially stopped.</p><p>The system driver must be installed before this function can be called.</p><p>Usage note: typical granularity is on the order of microseconds, but with some drivers might only be milliseconds.</p><p>See also: al_start_timer, al_destroy_timer
</p></div></div><p>

Waiting on an event queue for a timer event :
</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="k1">int</span> letterCount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  2</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> textTimer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span>seconds_per_letter<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>textTimer <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>queue<span class="k2">)</span> <span class="k2">{</span>Fail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue , <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>textTimer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// When you start writing your text :</span>
<span class="number"> 10</span>letterCount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 11</span><a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>textTimer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="c">// In your program loop</span>
<span class="number"> 14</span><span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>    <span class="k3">+</span><span class="k3">+</span>letterCount<span class="k2">;</span>
<span class="number"> 21</span>    PlayBeep<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>    redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k2">}</span>
<span class="number"> 24</span><span class="k2">}</span> <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>   <span class="c">// draw your text here</span>
<span class="number"> 28</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 16 Mar 2014 10:53:33 +0000</pubDate>
	</item>
</rss>
