<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Shai Raiten&amp;#39;s Blog</title><link>http://blogs.microsoft.co.il/blogs/shair/</link><description>It&amp;#39;s all about code...</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ShaiRaiten" /><feedburner:info uri="shairaiten" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://www.podnova.com/add.srf?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.podnova.com/img_chicklet_podnova.gif">Subscribe with Podnova</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://odeo.com/listen/subscribe?feed=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://odeo.com/img/badge-channel-black.gif">Subscribe with ODEO</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FShaiRaiten" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item><title>מפגש קבוצת ALM בנושא אוטומציה ב–Visual Studio 2012</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/bJnO0bgdW5o/alm-visual-studio-2012.aspx</link><pubDate>Mon, 20 May 2013 06:06:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2053737</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=2053737</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/20/alm-visual-studio-2012.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/20/alm-visual-studio-2012.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p dir="rtl"&gt;בשנתיים האחרונות שאני שומע רק על Coded UI&amp;#160; ב – Visual Studio אבל יש עוד כ”כ הרבה מעבר, במפגש הקרוב אני אדבר על כל יכולות האוטומציה ב – Visual Studio 2012 עבור מפתחים ואנשי אוטומציה.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;נדבר על Unit Test ויכולת ה – Fakes החדשה שמגיעה עם Visual Studio 2012 (מחליף את Pex &amp;amp; Moles)&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;ממשק Web Test Manager שמגיע עם Update 2, אשר מאפשר עבודה עם בדיקות ללא MTM.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;חידושים ודרכים יעילות לכתיבת Coded UI ועבודה עם דפדפנים שונים כגון FireFox ו – Chrome.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Web Performance Test&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Load Testing&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;בנוסף לא כדאי להפסיד הרצאה של ליאור פרידמן שידבר על ניהול פרוייקטי Agile.&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;strong&gt;פרטים נוספים ורישום בלינק זה:&lt;/strong&gt; &lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;a href="http://www.eventbrite.com/event/6729031715"&gt;http://www.eventbrite.com/event/6729031715&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;אשמח לראותכם במפגש!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2053737" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/bJnO0bgdW5o" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TDD/default.aspx">TDD</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Load/default.aspx">Load</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Load+Test/default.aspx">Load Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Unit+Test/default.aspx">Unit Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Google+Chrome/default.aspx">Google Chrome</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WebTest/default.aspx">WebTest</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web+Access/default.aspx">Web Access</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/User+Group/default.aspx">User Group</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Coded+UI+Test/default.aspx">Coded UI Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Quality+Center+2+Team+System+2010/default.aspx">Quality Center 2 Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Native/default.aspx">Native</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/NUnit/default.aspx">NUnit</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Microsoft+Test+Manager+2012/default.aspx">Microsoft Test Manager 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/20/alm-visual-studio-2012.aspx</feedburner:origLink></item><item><title>SignalR Isn’t Working on Samsung Galaxy 3</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/O7xFqWS9nkw/signalr-isn-t-working-on-samsung-galaxy-3.aspx</link><pubDate>Tue, 14 May 2013 06:16:21 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2030287</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=2030287</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/14/signalr-isn-t-working-on-samsung-galaxy-3.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/14/signalr-isn-t-working-on-samsung-galaxy-3.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;I know you think the title is wired, because what is the relation between &lt;strong&gt;&lt;a href="http://signalr.net/" target="_blank"&gt;SignalR&lt;/a&gt;&lt;/strong&gt; (WebSockets) and a specific device such as Samsung Galaxy 3?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;ASP.NET SignalR is a new library for ASP.NET developers that makes it incredibly simple to add real-time web functionality to your applications. What is &amp;quot;real-time web&amp;quot; functionality? It&amp;#39;s the ability to have your server-side code push content to the connected clients as it happens, in real-time.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;While working on a project working with &lt;strong&gt;&lt;a href="http://signalr.net/" target="_blank"&gt;SignalR&lt;/a&gt;&lt;/strong&gt; we faced a problem, the following code start the connection with the hub but the following code isn’t working, neither &lt;u&gt;success&lt;/u&gt; or &lt;u&gt;failed&lt;/u&gt; message appear. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;$.connection.hub.start().done(function () {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; alert(&amp;quot;Connection Working!&amp;quot;);      &lt;br /&gt;}).fail(function (e) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; alert(&amp;quot;Connection Isn&amp;#39;t Working... :-(&amp;quot;);      &lt;br /&gt;});&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Tried to debug the code I didn’t understand why the &lt;strong&gt;fail &lt;/strong&gt;function isn’t invoked… I tired to change the transport layer to polling as part of the testing and it works……&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;connection.start({ transport: &amp;#39;longPolling&amp;#39;]})&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I said to my self this is strange, After all Galaxy 3 supports should &lt;u&gt;WebSockets &lt;/u&gt;and beside that this what SignalR should do if the browser isn’t supporting a specific transport layer.&lt;/p&gt;  &lt;p&gt;From this part of I’ve understand the problem related to SignalR but still didn’t understand why that same code works on Nexus 4 and some other Android devices.&lt;/p&gt;  &lt;p&gt;So I made the following test, I’ve open the Galaxy 3 browser and navigate to “&lt;a href="http://www.websocket.org/echo.html"&gt;http://www.websocket.org/echo.html&lt;/a&gt;” to check support for &lt;u&gt;WebSockets &lt;/u&gt;, and surprise something isn’t working as it should – The log field didn’t showed anything (Again on different devices this works just fine).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_688F187B.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3F83B7D8.png" width="538" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So first thing I’ve modified &lt;strong&gt;jquery.signalR.js&lt;/strong&gt; file, I’ve added a &lt;strong&gt;time out&lt;/strong&gt; around the WebSockets connection, this solved the problem…&lt;/p&gt;  &lt;p&gt;Then after a short search I found this &lt;a href="https://github.com/SignalR/SignalR/issues/1653" target="_blank"&gt;Bug: Persistent Connection fails with IIS8 on Android Stock Browser&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And this guy add his fix for the problem here - &lt;a href="https://github.com/SignalR/SignalR/commit/6d892a3cdeb94099ed06b978ba66ec13fce521ae"&gt;https://github.com/SignalR/SignalR/commit/6d892a3cdeb94099ed06b978ba66ec13fce521ae&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can download the fix and implementing your own timeout around the connection start.&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2030287" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/O7xFqWS9nkw" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/PhoneGap/default.aspx">PhoneGap</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SignalR/default.aspx">SignalR</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Cordova/default.aspx">Cordova</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/14/signalr-isn-t-working-on-samsung-galaxy-3.aspx</feedburner:origLink></item><item><title>VS/TFS 2012 Update 2  &amp; Update 3 CTP</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/Xa7QwmbLVkA/vs-tfs-2012-update-2-amp-update-3-ctp.aspx</link><pubDate>Wed, 08 May 2013 06:55:20 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2008183</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=2008183</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/08/vs-tfs-2012-update-2-amp-update-3-ctp.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/08/vs-tfs-2012-update-2-amp-update-3-ctp.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;Couple of days ago Brian Harry post about the new release of Update 2 for Visual Studio and TFS 2012, and today another release of Update 3 that isn’t big a Update 1 and 2 but contains a set of bug fixes that can ease you work.&lt;/p&gt;  &lt;p&gt;Before jumping to Update 3, if for some reason you’re not using Update 2 this is the time to read about it and install it!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update 2&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/04/04/vs-tfs-2012-2-update-2-released-today.aspx" target="_blank"&gt;VS/TFS 2012.2 (Update 2)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/05/06/visual-studio-2012-update-2-vs-2012-2-isos-available.aspx"&gt;Visual Studio 2012 Update 2 (VS 2012.2) ISOs available&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/04/29/team-explorer-everywhere-2012-update-2.aspx"&gt;Team Explorer Everywhere 2012 Update 2&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_45AE698F.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_37BBD7FA.png" width="663" height="427" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update 3 – CTP&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/05/07/visual-studio-2012-3-update-3-go-live-ctp-is-now-available.aspx"&gt;Visual Studio 2012.3 (Update 3) “go-live” CTP is now available&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Installing it should be relatively straight forward – for both VS and TFS, just run the installer.&amp;#160; There should be no compatibility breaks so you need not upgrade all of your components at once, though, over time, you should plan to get them all updated&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;List Of Improvements – &lt;a href="http://support.microsoft.com/kb/2835600" target="_blank"&gt;Full List&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Technology improvements&lt;/font&gt; - &lt;b&gt;Team Foundation Server&lt;/b&gt;&lt;/strong&gt;&lt;a&gt;&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;Build settings can be preserved when you upgrade a TFS 2012 instance. &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Improvements are made in the &lt;strong&gt;New Build Definition &lt;/strong&gt;UI for the Continuous Integration (CI) build in Git-based team projects.&lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;Visual Studio Test&lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;b&gt;Web test&lt;/b&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Microsoft Visual Studio 2010 crashes when you create a Web test on a computer that has both Visual Studio 2010 Service Pack 1 (SP1) and Visual Studio 2012 Update 2 installed.&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;b&gt;Coded UI test&lt;/b&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;You cannot run coded UI together with the cross browser testing feature by using Selenium components.&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;b&gt;Load test&lt;/b&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;When you analyze a load test run, parts of the results are missing from the graph in the default view&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;&lt;b&gt;Unit test&lt;/b&gt;&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/783438"&gt;783438: Mstest.exe fails to execute unit because of missing assemblies&lt;/a&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;b&gt;Administration and Operations&lt;/b&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;The event log does not include stack traces when the administrator console crashes.&lt;/li&gt;      &lt;li&gt;You cannot configure TFS proxy on a computer that belongs to a separate domain from a TFS 2012 server.&lt;/li&gt;      &lt;li&gt;TFS 2012 backup plan wizard does not report an error when you configure a backup plan by using the Local System account.&lt;/li&gt;      &lt;li&gt;A user who does not have read permission on an area path can receive email notifications of changes to work items under the area path.&lt;/li&gt;      &lt;li&gt;Slow performance when you open a work item that has many customized fields in TFS Web Access.&lt;/li&gt;      &lt;li&gt;Fix adds upload retries for Version Control files that are being checked in or shelved to reduce the number of deceptive errors.&lt;/li&gt;      &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/2835600" target="_blank"&gt;More&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;    &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2008183" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/Xa7QwmbLVkA" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WorkItem+Tracking/default.aspx">WorkItem Tracking</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Work+Items/default.aspx">Work Items</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TDD/default.aspx">TDD</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Load+Test/default.aspx">Load Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Unit+Test/default.aspx">Unit Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HotFix/default.aspx">HotFix</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WebTest/default.aspx">WebTest</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Coded+UI+Test/default.aspx">Coded UI Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2012/default.aspx">TFS 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/08/vs-tfs-2012-update-2-amp-update-3-ctp.aspx</feedburner:origLink></item><item><title>Advanced Coded UI Testing–SDP 2013</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/HPkvN4eu1vc/advanced-coded-ui-testing-sdp-2013.aspx</link><pubDate>Tue, 07 May 2013 12:54:20 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2005161</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=2005161</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/07/advanced-coded-ui-testing-sdp-2013.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/07/advanced-coded-ui-testing-sdp-2013.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;On Sunday I spoke about “&lt;b&gt;Advanced Coded UI Testing” &lt;/b&gt;at Sela SDP workshops day, this was great day with many people who showed great interest in Coded UI and Automation using Visual Studio 2012. In this workshops we started from the beginning to advanced Coded UI technics and methodologies of how to write &lt;u&gt;Good&lt;/u&gt; code for flexibility and good maintainability of your tests..&lt;/p&gt;  &lt;p&gt;I’ve also gave some cool tools for help running Coded UI, tools like:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;MS Test Runner UI&lt;/strong&gt; – Allow everyone (with Test Agent installed) to load test files and execute tests – Good for manual testers that wants to run automated tests. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Trx to HTML&lt;/strong&gt; converter. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Coded UI Steps Tracker&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;and More… &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;iframe style="margin-bottom:5px;border-top:#ccc 1px solid;border-right:#ccc 1px solid;border-bottom:#ccc 0px solid;border-left:#ccc 1px solid;" height="356" src="http://www.slideshare.net/slideshow/embed_code/20725504" frameborder="0" width="427" scrolling="no"&gt; &lt;/iframe&gt;&lt;/p&gt;  &lt;div style="margin-bottom:5px;"&gt;&lt;strong&gt;&lt;a title="Advanced Coded UI Testing" href="http://www.slideshare.net/ShaiRaiten/coded-ui-ws" target="_blank"&gt;Advanced Coded UI Testing&lt;/a&gt; &lt;/strong&gt;from &lt;strong&gt;&lt;a href="http://www.slideshare.net/ShaiRaiten" target="_blank"&gt;Shai Raiten&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;  &lt;div style="margin-bottom:5px;"&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2005161" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/HPkvN4eu1vc" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Coded+UI+Test/default.aspx">Coded UI Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SDP/default.aspx">SDP</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Sela+Group/default.aspx">Sela Group</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/05/07/advanced-coded-ui-testing-sdp-2013.aspx</feedburner:origLink></item><item><title>Fifth Year as Microsoft MVP - 2013</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/yT0WK4d8EPY/fifth-year-as-microsoft-mvp-2013.aspx</link><pubDate>Mon, 01 Apr 2013 17:12:40 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1848040</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1848040</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/04/01/fifth-year-as-microsoft-mvp-2013.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/04/01/fifth-year-as-microsoft-mvp-2013.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;This is my fifth time as VS ALM MVP and still excited like it’s the first time I got this email:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Congratulations! We are pleased to present you with the 2013 Microsoft® MVP Award!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To be a Microsoft MVP is a great honor and I’ll keep work hard for the community: Talking and Writing about new technologies and more.&lt;/p&gt;  &lt;p&gt;I also would like to say many thanks to my company &lt;a href="http://www.selagroup.com/"&gt;Sela&lt;/a&gt;, my boss David Bassa and Caro Segal and Ishai Ram who pushed me forward in the technical community, promote many tools we built for the ALM community and helping me keep the MVP Award for another Year!&lt;/p&gt;  &lt;p&gt;And I’ll also like to thank &lt;strong&gt;You&lt;/strong&gt;, yes &lt;strong&gt;You&lt;/strong&gt;! reading my blog is big part of my contribution for the community and I hope you keep reading my blog and hopefully enjoy it.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;My MVP Profile - &lt;/strong&gt;&lt;/u&gt;&lt;a href="https://mvp.support.microsoft.com/profile/Shai.Raiten"&gt;&lt;strong&gt;https://mvp.support.microsoft.com/profile/Shai.Raiten&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1848040" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/yT0WK4d8EPY" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/MVP/default.aspx">MVP</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Sela+Group/default.aspx">Sela Group</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/04/01/fifth-year-as-microsoft-mvp-2013.aspx</feedburner:origLink></item><item><title>פיתוח משחקים ב JavaScript - מבוסס על משחק סופר 8 - חלק 5</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/EQvlQ5J8Abc/javascript-8-5.aspx</link><pubDate>Sun, 24 Mar 2013 10:56:42 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1823673</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1823673</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/24/javascript-8-5.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/24/javascript-8-5.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p style="direction:rtl;"&gt;זהו החלק האחרון בנושא סופר 8 , אני אמשיך להרחיב בנושא JavaScript ופיתוח מחשקים בכללי אבל היום אני רוצה לסגור את הדברים הבסיסיים בפיתוח משחק סופר 8.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;בחלק הקודם &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/17/javascript-8-4.aspx"&gt;פיתוח משחקים ב JavaScript - מבוסס על משחק סופר 8 - חלק 4&lt;/a&gt; דיברנו על איך להפוך את המשחק ליותר אינטרקטיבי ע”י הוספת רקעים ואלמנטים נוספים למשחק,&amp;#160; ראינו איך אפשר בצורה קלה ונוחה לטעון את כל הגרפיקה (ועוד) בעזרת ספריית PreloadJS ולהתחיל את המשחק כאשר קיבלנו את כל הדברים בנחוצים למשחק.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;בפוסט היום נראה איך אפשר לבצע קפיצה של המשתמש (לא רק אנימציה) וכמובן אחר הנושאים החשובים ביותר- התנגשות עם אובייקטים – Collision.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_27468327.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_1DE9FC4C.png" width="635" height="322" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/index.html" target="_blank"&gt;לדוגמא המלאה&lt;/a&gt;&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;בהמשך מהפוסט הקודם נוסיף את הקוד הבא תחת פונקציית &lt;strong&gt;handleComplete &lt;/strong&gt;על מנת לטעון אבן למשחק שלנו:&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5D276442.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_0F0EDF00.png" width="53" height="50" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;rock&amp;quot;&lt;/span&gt;:
    &lt;span class="kwrd"&gt;var&lt;/span&gt; g = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Graphics()
    g.beginBitmapFill(result);
    g.drawRect(0, 0, 45, 44)
    rock = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape(g);
    rock.y = h - 119;
    rock.x = w;
    rock.height = 44;
    rock.width = 45;
    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;כעת נשאר להוסיף אותה לאובייקט Stage על מנת שתופיע במשחק:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;stage.addChild(sky, ground, hill, sun, player, &lt;font style="background-color:#ffff00;"&gt;rock&lt;/font&gt;);&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;עכשיו שיש אבן במשחק בואו נכניס אפשרות תלקפוץ מעליה, על מנת לבצע זאת נירשם ל – &lt;strong&gt;stagemousedown&lt;/strong&gt; על מנת לתפוס לחיצה של העכבר של המשחק, כאשר נקבל פעולה זאת ננגן את פעולה הקפיצה ונשנה את הערך של isJumping ל – true.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;נוסיף את הקוד הבא תחת פונקציית handleComplete לפני הפעלת הטיימר – setFPS.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;stage.addEventListener(&lt;span class="str"&gt;&amp;quot;stagemousedown&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (isJumping) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
    play(&lt;span class="str"&gt;&amp;quot;jump_h&amp;quot;&lt;/span&gt;);
    gameOver = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    isJumping = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
});&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;כעת נוסיף את הקוד שישנה את מיקום הדמות על ציר &lt;strong&gt;Y&lt;/strong&gt; כך שנוכל לקפוץ מעל האבן, הקוד הבא אינו הפתרון הנכון יותר אבל לדוגמא שלנו הוא פשוט ועובד, בעיקרון אפשר להוסיף הרבה קוד נוסף לביצוע פעולה זאת על ידי טיימר או מיקום הדמות אבל בשבילנו זה מספיק כרגע.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;הקוד בודק שהדמות לא נמצאת באוויר (אין קפיצה כפולה), ומפעיל טיימר של שניה אחת, לאחר אותה שניה הטיימר יחזיר את הדמות לקרקע, אבל לפני זה המאפיין ה – &lt;strong&gt;y&lt;/strong&gt; של השחקן יעלה ב – 4 פיקסלים כלפי מעלה עד לגובה מקסימלי, כאשר הדמות תגיע לגובה מקסימלי הדמות תתחיל בירידה כלפי מטה.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; handleJump() {
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (isJumping) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (onTheAir == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
            onTheAir = setTimeout(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {
                isJumping = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                player.y = playerBaseY;
                onTheAir = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                goingDown = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                top = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            }, 1000);
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (goingDown &amp;amp;&amp;amp; player.y &amp;lt;= playerBaseY) {
            player.y += 4;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; {
            player.y -= 4;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (player.y &amp;lt;= maxJumpHeight)
                goingDown = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;על מנת לבצע את הקוד נוסיף קריאה לפונקציית handleJump תחת tick:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;function tick() {
    &lt;font style="background-color:#ffff00;"&gt;handleJump();&lt;/font&gt;
    ...
}&lt;/pre&gt;

&lt;p style="direction:rtl;"&gt;כעת נוכל לבצע קפיצה בעזרת לחיצה על מקש שמאלי על המשחק.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;דבר אחרון שנשאר לנו הוא להתמודד עם התנגשות של שני אובייקטים במשחק, כלומר עם השחקן יתנגש באבן אז הדמות תיפול.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;ממליץ לכם לקרוא - &lt;a href="http://www.realtimerendering.com/intersections.html" target="_blank"&gt;Object/Object Intersection&lt;/a&gt;, ולהתעניין קצת יותר בנושא כי הוא בהחלט קצת מורכב, הרעיון המרכזי הוא לדעת מתי הדמות או אבן מתנגשות אחת בשניה, יש נוסחאות שונות לחשב את זה (תלוי גם עם הדמות מרובעות או מעגליות).&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&amp;#160;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; checkRectIntersection(r1, r2) {
    &lt;span class="kwrd"&gt;var&lt;/span&gt; deltax = r1.x - r2.x;
    &lt;span class="kwrd"&gt;var&lt;/span&gt; deltay = r1.y - r2.y;
    &lt;span class="kwrd"&gt;var&lt;/span&gt; dist = 25;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Math.abs(deltax) &amp;lt; dist &amp;amp;&amp;amp; Math.abs(deltay) &amp;lt; dist) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (Math.sqrt(deltax * deltax + deltay * deltay) &amp;lt; dist) {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }
    }
    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;עכשיו לחלק הקוד האחרון של המשחק, פונקציית HandleCollision אשר תקרא מתוך פונקציית tick:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; HandleCollisions() {
    &lt;span class="kwrd"&gt;var&lt;/span&gt; a = getCollideableItemBounds(player);
    &lt;span class="kwrd"&gt;var&lt;/span&gt; b = getCollideableItemBounds(rock);

    &lt;span class="kwrd"&gt;var&lt;/span&gt; oppss = checkRectIntersection(a, b);

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (oppss &amp;amp;&amp;amp; !gameOver) {
        console.log(oppss);
        gameOver = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        play(&lt;span class="str"&gt;&amp;quot;fall_h&amp;quot;&lt;/span&gt;);
    }
}&lt;/pre&gt;

&lt;p style="direction:rtl;"&gt;וסיימנו…. כעת כאשר הדמות תגיע למרחב של האבן המשחק יעצר ודמות תיפול לרצפה, לחיצה על קפיצה תמשיך את המשחק.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/index.html" target="_blank"&gt;לדוגמא המלאה&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1823673" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/EQvlQ5J8Abc" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Games/default.aspx">Games</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/24/javascript-8-5.aspx</feedburner:origLink></item><item><title>פיתוח משחקים ב JavaScript - מבוסס על משחק סופר 8 - חלק 4</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/cD2MT9_c2Hk/javascript-8-4.aspx</link><pubDate>Sun, 17 Mar 2013 08:51:20 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1805645</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1805645</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/17/javascript-8-4.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/17/javascript-8-4.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p style="direction:rtl;"&gt;בפוסט הקודם &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/14/javascript-8-3.aspx" target="_blank"&gt;חלק 3 – פיתוח משחקים ב – JavaScript&lt;/a&gt; דיברנו על איך להזיז את הדמות במרחב המשחק ואיך לשנות את כיון התמונה שתתאים לכיון שהדמות הולכת אליו.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;בפוסט הזה נדבר על יצירת אווירה (רקע ואלמנטים נוספים) למשחק, לא סתם איך להוסיף תמונות רקע נדבר על איך לגרום לרקע לנוע יחד עם הדמות עלל מנת ליצור תחושה של תנועה מתמשכת.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7F99794E.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_4F02A93E.png" width="329" height="166" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_2C8AC82B.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_5187C6FD.png" width="329" height="166" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_23E65BA0.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_423050EF.png" width="329" height="165" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p style="direction:rtl;"&gt;בפוסט זה נשתמש בספריה נוספת שנקראת – &lt;a href="http://www.createjs.com/Docs/PreloadJS/modules/PreloadJS.html" target="_blank"&gt;PreloadJS&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;שגם שייכת לסט הספריות של Create&lt;strong&gt;JS. &lt;/strong&gt;(עד עכשיו השתמשנו ב – EASE&lt;strong&gt;JS &lt;/strong&gt;שגם משתייכת לשם)&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;ספריית Preload&lt;strong&gt;JS, &lt;/strong&gt;מאפשרת טעינה של קבצי מוסיקה, תמונות ברקע ומאפשרת לנו לשלוט מתי כל חלקי המשחק נטענו בהצלחה.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;נוסיף לדף שלנו את הקריאה הבאה, אשר תאפשר לנו להשתמש ביכולות הטעינה של PreloadJS.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt; &amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/preloadjs-0.3.0.min.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;כעת נוסיף פונקצייה חדשה בשם &lt;strong&gt;start&lt;/strong&gt; ונוסיף אליה את הקוד הבא:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; start() {           
    manifest = [
        { src: &lt;span class="str"&gt;&amp;quot;assets/sky.png&amp;quot;&lt;/span&gt;, id: &lt;span class="str"&gt;&amp;quot;sky&amp;quot;&lt;/span&gt; },
        { src: &lt;span class="str"&gt;&amp;quot;assets/ground.png&amp;quot;&lt;/span&gt;, id: &lt;span class="str"&gt;&amp;quot;ground&amp;quot;&lt;/span&gt; },
        { src: &lt;span class="str"&gt;&amp;quot;assets/logo.png&amp;quot;&lt;/span&gt;, id: &lt;span class="str"&gt;&amp;quot;sun&amp;quot;&lt;/span&gt; },
        { src: &lt;span class="str"&gt;&amp;quot;assets/hill.png&amp;quot;&lt;/span&gt;, id: &lt;span class="str"&gt;&amp;quot;hill&amp;quot;&lt;/span&gt; }
    ];

    loader = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.LoadQueue(&lt;span class="kwrd"&gt;false&lt;/span&gt;);
    loader.onFileLoad = handleFileLoad;
    loader.onComplete = handleComplete;
    loader.loadManifest(manifest);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;עפי שניתן לראות בדוגמא מעלה, אנחנו מגדירים קובץ manifest (כמובן זה לא חייב להיות השם), בו אנחנו מגדירים את כל התכנים שאנו מעוניינים לטעון עבור המשחק.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;כאשר ההורדה תסתיים נעבור לפונקציית handleComplete, עבור כל תוכן שנטען בהצלחה נגיע ל – handleFileLoad ובה נוסיף את התוכן החדש למערך התמונות שלנו.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; assets = [];
&lt;span class="kwrd"&gt;function&lt;/span&gt; handleFileLoad(&lt;span class="kwrd"&gt;event&lt;/span&gt;) {
    assets.push(&lt;span class="kwrd"&gt;event&lt;/span&gt;.item);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;לפני שנמשיך לאיך מציגים את התמונות הנוספות אציג את הרקעים שנשתמש בהם:&lt;/p&gt;

&lt;table style="direction:rtl;" cellspacing="0" cellpadding="2"&gt;
    &lt;tr&gt;
      &lt;td valign="top"&gt;&lt;strong&gt;רצפה&lt;/strong&gt;&lt;/td&gt;

      &lt;td valign="top"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_34A9F24F.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_00C1B064.png" width="85" height="83" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td valign="top"&gt;כפי שניתן לראות מהתמונה מדובר על חלק קטן של הריצפה – אנחנו נראה איך לשכפל אותו בצורה קלה על מנת ליצור רצפה רצופה לאורך המשחק.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;&lt;strong&gt;הרים &lt;/strong&gt;&lt;/td&gt;

      &lt;td valign="top"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/SNAGHTML99495bb_2C522EC6.png"&gt;&lt;img title="SNAGHTML99495bb" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SNAGHTML99495bb" src="http://blogs.microsoft.co.il/blogs/shair/SNAGHTML99495bb_thumb_147AABC6.png" width="244" height="74" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;&lt;strong&gt;שמש&lt;/strong&gt; (לוגו של Super 8)&lt;/td&gt;

      &lt;td valign="top"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_2B19A7B5.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3284CB88.png" width="135" height="132" /&gt;&lt;/a&gt;&lt;/td&gt;

      &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top"&gt;&lt;strong&gt;שמיים&lt;/strong&gt;&lt;/td&gt;

      &lt;td valign="top"&gt;
        &lt;p style="direction:rtl;"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_20E7E319.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_0A917C2D.png" width="244" height="84" /&gt;&lt;/a&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

&lt;p style="direction:rtl;"&gt;אחרי שכל הקבצים נטענו והוכנסו למערך&amp;#160; &lt;strong&gt;assets, &lt;/strong&gt;אשר להתחיל למקם אותם על המסך.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;נוסיף את פונקציית &lt;strong&gt;handleComplete,&lt;/strong&gt; ונרוץ על כל האובייקטים שהוכנסו ל – &lt;strong&gt;assets, &lt;/strong&gt;ספריית PreloadJS לא רק טענה את התמונות ברקע אלא גם שייכה אותם לקבוצות לפי סוג הקובץ וכל אובייקט שנטען קיבל מאפיין ייחודי (id), בשורות הראשונות אנחנו נוציא את מאפיין ה – id של כל אובייקט שנטען ונשתמש בפונקציית getResult על מנת לקבל את האובייקט. &lt;/p&gt;

&lt;p style="direction:rtl;"&gt;כאשר נגיע לאובייקט – &lt;strong&gt;ground, &lt;/strong&gt;אנחנו רוצים לצייר רצפה לאורך כל אורך המשחק שלנו, אז ראשית ניצור אובייקט חדש מסוג – Shape ונצייר עליו את התמונה, שימו לב שאורך התמונה ה – w שמציין את אורך המשחק (Canvas), התוצאה שאנחנו נראה לא תהיה מריחה של התמונה ל – 600 פיקסלים אלא שיכפול של התמונה לאורך זה.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;לבסוף נוסיף את אובייקט ה – ground ל – stage (כפי שעשינו בפוסטים קודמים) ונתחיל את שעון המשחק.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/Demo4_1.html" target="_blank"&gt;דוגמא 1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; handleComplete() {
    buildPlayerSprite();

    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i = 0; i &amp;lt; assets.length; i++) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; item = assets[i];
        &lt;span class="kwrd"&gt;var&lt;/span&gt; _id = item.id;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; result = loader.getResult(_id);

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (item.type == createjs.LoadQueue.IMAGE) {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; bmp = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Bitmap(result);
        }

        &lt;span class="kwrd"&gt;switch&lt;/span&gt; (_id) {          
            &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;ground&amp;quot;&lt;/span&gt;:
                ground = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape();
                &lt;span class="kwrd"&gt;var&lt;/span&gt; g = ground.graphics;
                g.beginBitmapFill(result);
                g.drawRect(0, 0, w, 79);
                ground.y = h - 79;
                &lt;span class="kwrd"&gt;break&lt;/span&gt;;          
        }
    }

    stage.addChild(ground, player);

    player.gotoAndPlay(&lt;span class="str"&gt;&amp;quot;walk_h&amp;quot;&lt;/span&gt;);
    
    &lt;span class="kwrd"&gt;var&lt;/span&gt; fieldValue = id(&lt;span class="str"&gt;&amp;quot;fps&amp;quot;&lt;/span&gt;);
    &lt;span class="kwrd"&gt;var&lt;/span&gt; fps = parseInt(fieldValue.value);

    createjs.Ticker.setFPS(fps);
    createjs.Ticker.useRAF = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    createjs.Ticker.addEventListener(&lt;span class="str"&gt;&amp;quot;tick&amp;quot;&lt;/span&gt;, tick);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/Demo4_1.html" target="_blank"&gt;דוגמא 1&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7D775081.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_2907CEE4.png" width="582" height="163" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;הבעיה כרגע אין לי תחושה של התקדמות, השחקן מתקדם אבל הרצפה לא, על מנת לעשת זאת נצטרך להזיז את הרצפה יחד עם הדמות על מנת ליצור את האפקט.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;בתוך פונקציית &lt;strong&gt;tick, &lt;/strong&gt;נוסיף את השורה הבאה – אשר תזיז את הרצפה 10 פיקסלים לאחור.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; tick() {
          &lt;span class="kwrd"&gt;var&lt;/span&gt; outside = w + 20;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; position = player.x + player.vX;

        player.x = (position &amp;gt;= outside) ? -200 : position;
        &lt;font style="background-color:#ffff00;"&gt;ground.x = (ground.x - 10);&lt;/font&gt;

    }
    stage.update();
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/Demo4_2.html" target="_blank"&gt;דוגמא – 2&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;עכשיו אפשר לראות את הרצפה מתקדמת יחד עם תזוזת הדמות אבל היא חתוכה בהתחלה שלה, מה שצריך לעשות הוא להגדיל את רוחב הרצפה בצורה הבאה:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;ground&amp;quot;&lt;/span&gt;:
    ground = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape();
    &lt;span class="kwrd"&gt;var&lt;/span&gt; g = ground.graphics;
    g.beginBitmapFill(result);
    g.drawRect(0, 0, &lt;font style="background-color:#ffff00;"&gt;w+330&lt;/font&gt;, 79);
    ground.y = h - 79;
    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;פשוט הוספתי עוד 330 פיקסלים לרוחב התמונה, אבל גם זה לא פתור את הבעיה, אחרי הכל הרצפה עדיין תעלם מהמסך, נוסיף את השורה הבא תחת פונקציית &lt;strong&gt;tick &lt;/strong&gt;ובעזרת מודולו של תוספת הרוחב שהוספנו נדאג שה – x לעולם לא יצא מגבולות המסך.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;ground.x = (ground.x - 10) &lt;font style="background-color:#ffff00;"&gt;% 330&lt;/font&gt;;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/Demo4_3.html" target="_blank"&gt;דוגמא - 3&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;כעת שהבנו את הדוגמא הבסיסית נוסיף את שאר האובייקט למשחק:&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;* &lt;/strong&gt;&lt;/font&gt;שימו לב שנרשמתי ל - &lt;strong&gt;stage.addEventListener(&lt;/strong&gt;&lt;span class="str"&gt;&lt;strong&gt;&amp;quot;stagemousedown,&lt;/strong&gt;&amp;#160; אשר יאפשר לנו לדעת מתי לחצו על ב – Canvas ונוכל לבצע פעולות קפיצה.&lt;/span&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; handleComplete() {
    buildPlayerSprite();

    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i = 0; i &amp;lt; assets.length; i++) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; item = assets[i];
        &lt;span class="kwrd"&gt;var&lt;/span&gt; _id = item.id;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; result = loader.getResult(_id);

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (item.type == createjs.LoadQueue.IMAGE) {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; bmp = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Bitmap(result);
        }

        &lt;span class="kwrd"&gt;switch&lt;/span&gt; (_id) {
            &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;sky&amp;quot;&lt;/span&gt;:
                &lt;span class="kwrd"&gt;var&lt;/span&gt; g = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Graphics()
                g.beginBitmapFill(result);
                g.drawRect(0, 0, w * 2, h)
                sky = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape(g);
                &lt;span class="kwrd"&gt;break&lt;/span&gt;;
            &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;ground&amp;quot;&lt;/span&gt;:
                ground = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape();
                &lt;span class="kwrd"&gt;var&lt;/span&gt; g = ground.graphics;
                g.beginBitmapFill(result);
                g.drawRect(0, 0, w + 330, 79);
                ground.y = h - 79;
                &lt;span class="kwrd"&gt;break&lt;/span&gt;;
            &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;hill&amp;quot;&lt;/span&gt;:
                hill = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape(&lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Graphics().beginBitmapFill(result).drawRect(0, 0, w, 159));
                hill.x = 0;
                hill.scaleX = 3;
                hill.y = 163;
                &lt;span class="kwrd"&gt;break&lt;/span&gt;;
            &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;sun&amp;quot;&lt;/span&gt;:
                &lt;span class="kwrd"&gt;var&lt;/span&gt; g = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Graphics();
                g.beginBitmapFill(result);
                g.drawRect(0, 0, 129, 129);
                sun = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Shape(g);
                sun.x = w;
                sun.y = 37;
                &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        }
    }

    stage.addChild(sky, ground, hill, sun, player);

    player.gotoAndPlay(&lt;span class="str"&gt;&amp;quot;walk_h&amp;quot;&lt;/span&gt;);
    stage.addEventListener(&lt;span class="str"&gt;&amp;quot;stagemousedown&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
        play(&lt;span class="str"&gt;&amp;quot;jump_h&amp;quot;&lt;/span&gt;);
    });

    &lt;span class="kwrd"&gt;var&lt;/span&gt; fieldValue = id(&lt;span class="str"&gt;&amp;quot;fps&amp;quot;&lt;/span&gt;);
    &lt;span class="kwrd"&gt;var&lt;/span&gt; fps = parseInt(fieldValue.value);

    createjs.Ticker.setFPS(fps);
    createjs.Ticker.useRAF = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    createjs.Ticker.addEventListener(&lt;span class="str"&gt;&amp;quot;tick&amp;quot;&lt;/span&gt;, tick);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;לבסוף נשנה את פונקציית &lt;strong&gt;tick, &lt;/strong&gt;שתזיז את שאר האובייקטים במשחק.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;ב – tick יש חישוב של &lt;strong&gt;outside , &lt;/strong&gt;כלומר מתי האובייקט נמצא מחוץ למסך, כאשר נראה שאובייקט יצא החוצה נוכל להחזיר אותו ע”י שינוי מאפיין - &lt;strong&gt;x&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; tick() {
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (_action.indexOf(&lt;span class="str"&gt;&amp;quot;walk&amp;quot;&lt;/span&gt;) != -1 || _action.indexOf(&lt;span class="str"&gt;&amp;quot;jump&amp;quot;&lt;/span&gt;) != -1) {

        &lt;span class="kwrd"&gt;var&lt;/span&gt; outside = w + 20;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; position = player.x + player.vX;

        player.x = (position &amp;gt;= outside) ? -200 : position;

        sky.x = (sky.x - 5) % w;
        hill.x = (hill.x - 2) % w;
        ground.x = (ground.x - 10) % 330;

        sun.x = (sun.x - 1);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (sun.x &amp;lt;= -135) { sun.x = outside + 50; }

    }
    stage.update();
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://1lastletter.com/super8demo/Demo4.html" target="_blank"&gt;לדוגמא המלאה&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1805645" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/cD2MT9_c2Hk" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Games/default.aspx">Games</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/17/javascript-8-4.aspx</feedburner:origLink></item><item><title>פיתוח משחקים ב JavaScript - מבוסס על משחק סופר 8 - חלק 3</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/IiPR5zrhztE/javascript-8-3.aspx</link><pubDate>Thu, 14 Mar 2013 07:14:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1799113</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1799113</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/14/javascript-8-3.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/14/javascript-8-3.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p style="direction:rtl;"&gt;בפוסט הקודם &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/10/javascript-8-2.aspx" target="_blank"&gt;חלק 2 בפיתוח משחקים ב – JavaScript&lt;/a&gt; דיברנו על מה זה&amp;#160; &lt;strong&gt;Sprite&lt;/strong&gt; ואיך בעזרת ספרייה EASE&lt;strong&gt;JS &lt;/strong&gt;להציג רצף תמונות מאותו מקבץ תמונות על מנת להציג אנימציה למשתמש.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;בפוסט הזה נדבר על איך להזיז את הדמות במרחב על פי הפעולה שהדמות מבצעת.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;המשימה הראשונה שלנו היא להזיז את הדמות במרחב המשחק, על מנת לבצע זאת נשנה את פונקציית &lt;strong&gt;tick &lt;/strong&gt;באופן הבא:&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;ראשית, נגדיר תחום משחק – תחום המשחק ימנע מהדמות שלנו לבצע מגבולות המשחק.&lt;/p&gt;  &lt;p style="direction:rtl;"&gt;בתוך פונקציית tick נוסיף את הקוד הבא:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (player.x &amp;gt;= id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;).width - playerWH) {
    &lt;span class="rem"&gt;// You reached the end -  We need to walk left&lt;/span&gt;
}

&lt;span class="kwrd"&gt;if&lt;/span&gt; (player.x &amp;lt; playerWH) {
    &lt;span class="rem"&gt;// You reached the end -  We need to walk right&lt;/span&gt;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;הקוד הנ”ל יבוצע כאשר מאפיין ה – x של הדמות שלנו (player) גדול מרוחב אובייקט ה – gameCanvas, וכאשר מאפיין ה – x של הדמות קטן מרוחב הדמות.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;עכשיו נזיז את הדמות במרחב לפי תנאים אלו:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (player.x &amp;gt;= id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;).width - playerWH) {
    &lt;span class="rem"&gt;// You reached the end -  We need to walk left&lt;/span&gt;
    &lt;font style="background-color:#ffff00;"&gt;player.direction = -90;&lt;/font&gt;
}

&lt;span class="kwrd"&gt;if&lt;/span&gt; (player.x &amp;lt; playerWH) {
    &lt;span class="rem"&gt;// You reached the end -  We need to walk right&lt;/span&gt;
    &lt;font style="background-color:#ffff00;"&gt;player.direction = 90;&lt;/font&gt;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;הקוד הנ”ל משנה את כיון הדמות ל – 90 מעלות או&amp;#160; 90- מעלות לפי כיון ההליכה של הדמות.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;מה שנשאר לנו עכשיו זה להזיז את הדמות ע”י שינוי מאפיין ה – x של אובייקט player, נוסיף את הקוד הבא לאחר לפי הקריאה ל – &lt;strong&gt;stage.update, &lt;/strong&gt;הקוד אחראי על שינוי מאפיין ה – x בהתאם לכיון הדמות.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;vX – תאוצה על ציר – x , ניתן לשינוי וישפיע את התקדמות הדמות במרחב.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;player.direction == 90 ? player.x += player.vX : player.x -= player.vX;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;עכשיו עומדת לפנינו בעיה, כאשר הדמות זזה לכיון ימין של המסך היא לא מתהפכת.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/SNAGHTML20add10_4B02D8B5.png"&gt;&lt;img title="SNAGHTML20add10" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SNAGHTML20add10" src="http://blogs.microsoft.co.il/blogs/shair/SNAGHTML20add10_thumb_4015D1A0.png" width="454" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://tinyurl.com/Super8-Demo3" target="_blank"&gt;דוגמא באתר&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;אפשר ליצור גרפיקה תואמת לכיוונים השונים אבל זה לא פתרון יעיל, גם שימוש ב – &lt;strong&gt;scaleX&lt;/strong&gt; ישפיע באופן רע על ביצועי המשחק, על מנת להפוך את הדמות נשתמש בפונקציית &lt;strong&gt;addFlippedFrames&lt;/strong&gt; שכל מטרתה היא הפיכת הדמות בצורה אופקית ו\או אנכית.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;נוסיף את השורה הבאה לפני קריאה ל - &lt;strong&gt;player = new createjs.BitmapAnimation.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//( spriteSheet  horizontal  vertical  both ) &lt;/span&gt;
createjs.SpriteSheetUtils.addFlippedFrames(playerSprite, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p style="direction:rtl;"&gt;פונקציית &lt;strong&gt;addFlippedFrames &lt;/strong&gt;תשכפל את כל התמונות ב – &lt;strong&gt;Sprite &lt;/strong&gt;ותהפוך אותם בצורה אופקית ו\או בצורה אנכית.&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;כעת בקריאה לפעולה של הדמות (Jump, Walk וכו) נוכל לראות שכל הפעולות של הדמות (animations) שוכפלו ונוסף לשום הפעולה – &lt;strong&gt;h_.&lt;/strong&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;על מנת לבצע הליכה שמאלה נקרא לפונקציית &lt;strong&gt;gotoAndPlay&lt;/strong&gt; ונעביר את הפעולה עם סיומת &lt;strong&gt;h_&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; tick() {
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (_action.indexOf(&lt;span class="str"&gt;&amp;quot;walk&amp;quot;&lt;/span&gt;) != -1) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (player.x &amp;gt;= id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;).width - playerWH) {
            &lt;span class="rem"&gt;// You reached the end -  We need to walk left&lt;/span&gt;
            player.direction = -90;
            &lt;font style="background-color:#ffff00;"&gt;pla&lt;/font&gt;&lt;font style="background-color:#ffff00;"&gt;yer.gotoAndPlay(&lt;span class="str"&gt;&amp;quot;walk&amp;quot;&lt;/span&gt;)
&lt;/font&gt;        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (player.x &amp;lt; playerWH) {
            &lt;span class="rem"&gt;// You reached the end -  We need to walk right&lt;/span&gt;
            player.direction = 90;
            &lt;font style="background-color:#ffff00;"&gt;player.gotoAndPlay(&lt;span class="str"&gt;&amp;quot;walk_h&amp;quot;&lt;/span&gt;);&lt;/font&gt;
        }

        &lt;span class="rem"&gt;// Moving the sprite based on the direction &amp;amp; the speed&lt;/span&gt;
        player.direction == 90 ? player.x += player.vX : player.x -= player.vX;

    }
    stage.update();
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_6BE6258F.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_02C4F70C.png" width="604" height="509" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="direction:rtl;"&gt;&lt;a href="http://tinyurl.com/Super8-Demo3" target="_blank"&gt;דוגמא באתר&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1799113" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/IiPR5zrhztE" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Games/default.aspx">Games</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/14/javascript-8-3.aspx</feedburner:origLink></item><item><title>פיתוח משחקים ב JavaScript - מבוסס על משחק סופר 8 - חלק 2</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/D0RTeFbdmFY/javascript-8-2.aspx</link><pubDate>Sun, 10 Mar 2013 12:22:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1790864</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1790864</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/10/javascript-8-2.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/10/javascript-8-2.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p dir="rtl"&gt;בפוסט הקודם &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/07/javascript-8-1.aspx" target="_blank"&gt;חלק 1 – פיתוח משחקים ב – JavaScript&lt;/a&gt; דיברנו על פיתוח משחקים ב – JavaScript בעזרת ספרית EASE&lt;strong&gt;JS, &lt;/strong&gt;ספריה המאפשרת לנו לעבוד עם אוביקט Canvas של HTML 5 בצורה קלה ונוחה.&lt;/p&gt;  &lt;p dir="rtl"&gt;בפוסט הקודם הדגמתי איך בצורה קלה נוכל להשתמש באוביקט &lt;strong&gt;Stage&lt;/strong&gt; על מנת להכיל את כל האלמנטים של המשחק ושימוש ב – &lt;strong&gt;Ticker&lt;/strong&gt; על מנת לעדכן את האלמנטים בתוך לולאת המשחק.&lt;/p&gt;  &lt;p dir="rtl"&gt;הפוסט הזה ירחיב את הנושא ונתקדם למימוש פעולות של השחקן עד ידי הפעלת אנימציה ספציפית לכל פעולה.&lt;/p&gt;  &lt;p dir="rtl"&gt;לפני שאנחנו נכנסים לקוד צריך להבין להכיר אוביקט חשוב שנקרא – &lt;strong&gt;Sprite:&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;strong&gt;Sprite &lt;/strong&gt;הוא תמונה דו מימדית המכילה מקבץ של תמונות (כל מקבץ תמונות מתאר פעולה של השחקן – בדוגמא מטה) שנמצאות בשימוש ולשלב אותם לתמונה אחת גדולה שהיא מעין מפה של כל התמונות בייחד. כך התמונה הגדולה נטענת פעם אחת בלבד בעת העליה והצגת התמונות מתבצעת על ידי הצגת חלק מסויים בלבד של אותה תמונה גדולה לפי מיקום על הציר הרוחבי והאופקי. &lt;/p&gt;  &lt;p dir="rtl"&gt;בעזרת &lt;strong&gt;Sprite&lt;/strong&gt; נוכל ליצור אנימציה בצורה קלה על ידי איור של המצבים השונים שהמשתמש הולך לראות במשחק, השאלה הגדולה איך הופכים את ה – &lt;strong&gt;Sprite&lt;/strong&gt; למשהו שקל לעבוד איתו במשחק שלנו?&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_1B2E53A5.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_682E9D70.png" width="1079" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;ראשית נתחיל בטעינת התמונה, כאשר טעינת התמונה הסתיימה נקרא לפונקציית &lt;strong&gt;start.&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; stage, player, playerImage, _action;
&lt;span class="kwrd"&gt;var&lt;/span&gt; playerWH = 64;
&lt;span class="kwrd"&gt;var&lt;/span&gt; frequency = 4;

&lt;span class="kwrd"&gt;function&lt;/span&gt; init() {
    playerImage = &lt;span class="kwrd"&gt;new&lt;/span&gt; Image();
    playerImage.src = &lt;span class="str"&gt;&amp;quot;assets/Player.png&amp;quot;&lt;/span&gt;;
    playerImage.onload = start;
}
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;חשוב לבצע טעינה לפני התחלת האנימציה, כפי שאנחנו יודעים &lt;strong&gt;Sprite&lt;/strong&gt; יכול להכיל המון המון תמונות ועל כך משקל התמונה יכול להיות גדול, לכן חשוב לוודא שטעינת התמונה הסתיימה לפני שממשיכים לאנימציה.&lt;/p&gt;

&lt;p dir="rtl"&gt;בפוסט הקודם השתמשנו ב – &lt;strong&gt;Bitmap&lt;/strong&gt; לטעינת התמונה, אבל עכשיו אנחנו לא מעוניינים להוסיף למשחק את כל התמונה אלא רק חלקים ממנה. על מנת לעשות זאת נשתמש באובייקט &lt;strong&gt;SpriteSheet &lt;/strong&gt;שמגיע כחלק מ – EASE&lt;strong&gt;JS &lt;/strong&gt;וכל מטרתו היא טעינה של &lt;strong&gt;Sprite.&lt;/strong&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;כפי שניתן לראות מהדוגמא מטה, אנחנו מתחילים ביצירת Stage שיאכלס את האובייקט שלנו, לאחר מכן אנחנו יוצרים אובייקט &lt;strong&gt;SpriteSheet&lt;/strong&gt; ומגדירים את &lt;strong&gt;images&lt;/strong&gt; לתמונה של השחקן, תחת אובייקט &lt;strong&gt;frames&lt;/strong&gt; נגדיר את גודל הדמות (במקרה שלנו 64x64 פיקסלים), ולבסוף והחשוב ביותר וכאן נראה את הכח של &lt;strong&gt;SpriteSheet&lt;/strong&gt; היא הגדרת המצבים של הדמות.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; start() {
    stage = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Stage(id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;));

    &lt;span class="kwrd"&gt;var&lt;/span&gt; playerSprite = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.SpriteSheet({
        animations:
        {
            &lt;span class="str"&gt;&amp;quot;walk&amp;quot;&lt;/span&gt;: [0, 9, &lt;span class="kwrd"&gt;null&lt;/span&gt;],
            &lt;span class="str"&gt;&amp;quot;fall&amp;quot;&lt;/span&gt;: [10, 21, &lt;span class="kwrd"&gt;null&lt;/span&gt;],
            &lt;span class="str"&gt;&amp;quot;jump&amp;quot;&lt;/span&gt;: [22, 32, &lt;span class="kwrd"&gt;null&lt;/span&gt;],
            &lt;span class="str"&gt;&amp;quot;gamgam&amp;quot;&lt;/span&gt;: [34, 64, &lt;span class="kwrd"&gt;null&lt;/span&gt;],
            &lt;span class="str"&gt;&amp;quot;stand&amp;quot;&lt;/span&gt;: [44, 44, &lt;span class="kwrd"&gt;null&lt;/span&gt;],
            &lt;span class="str"&gt;&amp;quot;special_combo&amp;quot;&lt;/span&gt;: [22, 32, &lt;span class="str"&gt;&amp;quot;gamgam&amp;quot;&lt;/span&gt;]
        },
        images: [playerImage],
        frames:
            {
                height: playerWH,
                width: playerWH,
                regX: 0,
                regY: 0,
            }
    });
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;בדוגמאת הקוד מעלה נוכל לראות הגדרת מצבים של השחקן (קפיצה, נפילה, עמידה וכו) על ידי ציון התחלת רצף התמונות וסופו.&lt;/p&gt;

&lt;p dir="rtl"&gt;כפי שניתן לראות בתמונה מטה פעולת “הליכה” מתחילה מתמונה מספר 0 עד תמונה 9.&lt;/p&gt;

&lt;p dir="rtl"&gt;לאחר שהגדרנו את המצבים השונים נוכל פשוט לקרוא לפעולה בשמה, כלומר – נגן &lt;strong&gt;walk&lt;/strong&gt; או אם נגמר הזמן נגן &lt;strong&gt;fall&lt;/strong&gt;.&lt;/p&gt;

&lt;p dir="rtl"&gt;&lt;u&gt;&lt;strong&gt;“שם הפעולה” : [מיקום תמונת ראשונה,&amp;#160; מיקום תמונה אחרונה, פעולה הבאה, תדירות]&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;&lt;u&gt;ראו דוגמא ל – &lt;strong&gt;special_combo&lt;/strong&gt;, אשר מבצע רצף תמונות של קפיצה ולאחר מכן ממשיך עם פעולת &lt;strong&gt;gamgam&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/SNAGHTML68789ba_205CEEBC.png"&gt;&lt;img title="SNAGHTML68789ba" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SNAGHTML68789ba" src="http://blogs.microsoft.co.il/blogs/shair/SNAGHTML68789ba_thumb_592722BC.png" width="814" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;&lt;a href="http://tinyurl.com/Super8-Demo2" target="_blank"&gt;דוגמאת קוד באתר&lt;/a&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;לבסוף על מנת שנוכל לנגן את הפעולות נשתמש באובייקט נוסף בשם &lt;strong&gt;BitmapAnimation, &lt;/strong&gt;אובייקט זה יודע לקבל &lt;strong&gt;SpriteSheet&lt;/strong&gt; ומאפשר קריאה לאנימציות בעזרת פונקציית &lt;strong&gt;gotoAndPlay.&lt;/strong&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;תחת הקוד הקודם נוסיף יצירה של BitmapAnimation, נגדיר נקודת התחלה של הדמות, נוכל גם לקבוע מאיזה תמונה להתחיל (currentFrame), ולבסוף נקרא לפונקציית &lt;strong&gt;gotoAndPlay&lt;/strong&gt; ונעביר את שם הפעולה שאנחנו מעוניינים לנגן. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;player = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.BitmapAnimation(playerSprite);
player.x = id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;).width / 2;
player.y = id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;).height - playerWH;
&lt;span class="rem"&gt;//player.currentFrame = 2;&lt;/span&gt;
player.gotoAndPlay(&lt;span class="str"&gt;&amp;quot;walk&amp;quot;&lt;/span&gt;);

stage.addChild(player);

createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener(&lt;span class="str"&gt;&amp;quot;tick&amp;quot;&lt;/span&gt;, tick);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5FAA7C7F.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_727F0029.png" width="819" height="541" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;בדוגמא שבאתר תוכלו לשנות הקצב הריענון, תדירות ואת התאוצה של הדמות.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;switch&lt;/span&gt; (_id) {
    &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;fps&amp;quot;&lt;/span&gt;:
        createjs.Ticker.setFPS(parseInt(value));
        &lt;span class="kwrd"&gt;break&lt;/span&gt;;
    &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;velocity&amp;quot;&lt;/span&gt;:
        player.vX = parseInt(value);
        &lt;span class="kwrd"&gt;break&lt;/span&gt;;
    &lt;span class="kwrd"&gt;case&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;frequency&amp;quot;&lt;/span&gt;:
        frequency = parseInt(value);
        start();
        &lt;span class="kwrd"&gt;break&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;&lt;a href="http://tinyurl.com/Super8-Demo2" target="_blank"&gt;דוגמאת קוד באתר&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1790864" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/D0RTeFbdmFY" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Games/default.aspx">Games</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/10/javascript-8-2.aspx</feedburner:origLink></item><item><title>פיתוח משחקים ב JavaScript - מבוסס על משחק סופר 8 - חלק 1</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/IpvG_ukRYJI/javascript-8-1.aspx</link><pubDate>Thu, 07 Mar 2013 13:33:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1784309</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1784309</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/07/javascript-8-1.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/07/javascript-8-1.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p dir="rtl"&gt;פיתוח משחקים בשבילי זה תחביב ואולי אפילו קצת יותר, אין לי דרך יותר טובה לנסח את זה – זה פשוט מגניב!!! &lt;/p&gt; &lt;p dir="rtl"&gt;פיתוח משחקים כמעט תמיד הופך למשימה מאוד מורכבת, ככל שרוצים להגיע לרמה גבוה יותר של משחק, אבל בשביל דברים פשוטים אפשר בקלות להתחיל לפתח משחקים לבד ובכל שפה שתרגישו נוח לפתח,&amp;nbsp; אני חושב שלא קיימת שפה שבה לא נוכל לפתח משחקים (חלק אולי פחות מרשימים – אבל בהחלט אפשרי).&lt;/p&gt; &lt;p dir="rtl"&gt;אין מחקר שמוכיח זאת אבל היום השפה הפופולרית ביותר היא כנראה JavaScript, כמובן בגלל האינטרנט וכניסתו של HTML 5 כתקן עולמי וכמובן זה יכול לרוץ על מחשבים, טלפונים מחשבי יד וכמעט כל מכשיר שתומך HTML 5 (זה מתחיל להיות הרבה).&lt;/p&gt; &lt;p dir="rtl"&gt;המשחק שפותח עבור מיקרוסופט ישראל – &lt;a href="https://www.facebook.com/msdnisrael/app_547345328631959" target="_blank"&gt;סופר 8&lt;/a&gt; , הינו משחק מבוסס HTML 5 + JavaScript ואני הולך לדבר קצת על איך מתחילים לפתח משחק עם JavaScript ואתה תראו שפיתוח משחקים לא צריך להיות כ”כ מפחיד.&lt;/p&gt; &lt;p dir="rtl"&gt;&lt;h3 style="direction:rtl;"&gt;אז איך מתחילים?&lt;/h3&gt; &lt;ol style="direction:rtl;"&gt; &lt;li&gt; &lt;div&gt;&lt;strong&gt;סוג המשחק – &lt;/strong&gt;איזה משחק אתם רוצים לפתח? יש המון קטגוריות של משחקים – אני אצמצם את הרשימה בשבילכם – משחקי שולחן או משחקי וידאו.&lt;/div&gt; &lt;ol&gt; &lt;li&gt; &lt;div&gt;&lt;u&gt;משחקי שולחן&lt;/u&gt; – לדוגמא איקס עיגול, פאזל, פוקר הינם משחקים אשר המצב של המשחק נשאר סטטי עד לפעולה מצד המשתמש, המשחק לא משתנה עד שבוצעה פעולה ע”י שחקן אחר או על ידי עצמך.&lt;/div&gt; &lt;li&gt; &lt;div&gt;&lt;u&gt;משחקי וידאו&lt;/u&gt; – לדוגמא – &lt;a href="https://www.facebook.com/msdnisrael/app_547345328631959" target="_blank"&gt;סופר 8&lt;/a&gt; פאקמן, Bubbels או כל משחק שמשתנה גם בפעולה משתמש וגם לפי זמן. עוד דוגמא זה משחק יריות – גם אם לא תזוז עדיין יגיעו אליך מפלצות והעולם (המשחק) ימשיך לנוע.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;li&gt; &lt;div&gt;&lt;strong&gt;שליטה בשפה – &lt;/strong&gt;נכון אמרתי שזה אל חייב להיות כ”כ מסובך לפתח משחק אבל בשביל לפתח משחק צריך שליטה טובה בשפה שבחרתם.&lt;/div&gt; &lt;li&gt; &lt;div&gt;&lt;strong&gt;כלי עזר – &lt;/strong&gt;אחד הדברים שאני ממליץ הוא לא לכתוב הכל בעצמכם, כל המשחקים הגדולים משתמשים בתשתיות לפיתוח משחקים (כאלו שפותחו על ידם או נקנו), אתה יכול לכתוב אבל פשוט חבל על הזמן שלך לבצע דברים שכבר בוצעו אין ספור פעמים ע”י אחרים, לדוגמא – אם אתה רוצה לממש פיזיקה במשחק על מנת להשפיע על אובייקטים שונים – זה ידרוש לא מעט זמן כתיבה או שתוכל להשתמש בספריה קיימת.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;/p&gt;&lt;h3 style="direction:rtl;"&gt;לולאת משחק&lt;/h3&gt; &lt;p style="direction:rtl;"&gt;&lt;img style="float:right;display:inline;" align="right" src="http://rbwhitaker.wdfiles.com/local--files/the-game-loop/GameLoop.png" width="158" height="267" alt="" /&gt;&lt;/p&gt; &lt;p style="direction:rtl;"&gt;אחד המרכיבים החשובים ביותר בפיתוח משחקים נקרא לולאת משחק (Game Loop), לולאת המשחק אחראית על ביסוס לוגיקת המשחק ע”י ציור הגרפיקה במשחק. לולאת המשחק מאפשרת למשחק להמשיך להתקדם גם בלי קבלת פעולות חדשות מהמשתמש.&lt;/p&gt; &lt;p dir="rtl"&gt;תחשבו על Notepad, כאשר אנחנו פותחים אותו ולא כותבים&amp;nbsp; Notepad לא עושה שום דבר. &lt;br /&gt;עכשיו נפתח Outlook.com או Gmail.com ולא נכתוב דבר – ברקע עדיין מתרחשים דברים – נכו שמדובר על Ajax וזה לא קשור למשחק אבל הרעיון שיש תהליכים שרצים ברקע ולא &lt;u&gt;רק&lt;/u&gt; מחכים לפעולה של המשתמש.&lt;/p&gt; &lt;p dir="rtl"&gt;אז איך יוצרים לולאת משחק?, הדוגמא לפניכם הוא הדבר הראשון שהרבה מפתחים חושבים עליו ישר אבל הוא כנראה לא הדבר הכי יעיל:&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt; (!MyGame.stopped) { 
  MyGame.update(); 
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="rtl"&gt;אחד הדברים המרכזיים שלולאת המשחק מבצעת היא קריאה לפונקציית &lt;strong&gt;update, &lt;/strong&gt;שאחראית על עדכון המשחק –&lt;u&gt; עדכון נתונים&lt;/u&gt;, &lt;u&gt;עדכון נקודות&lt;/u&gt; &lt;u&gt;הזזת אוביקטים&lt;/u&gt; &lt;u&gt;במשחק&lt;/u&gt; ועוד).&lt;/p&gt;
&lt;p dir="rtl"&gt;אם נשתמש ב – While בשביל לקרוא לפעולות &lt;strong&gt;update&lt;/strong&gt;&amp;nbsp; (אנחנו מדברים על JavaScript), הדפדפדן כנראה יחסום את הפונקציה וגם לא נהיה הכי יעילים כי אין לנו אפשרות לשלוט במהירות המשחק או במילים אחרות כל כמה זמן אנחנו רוצים לעדכן את האובייקטים במשחק – FPS – Frames Per Second.&lt;/p&gt;
&lt;p dir="rtl"&gt;פתרון נוסף שנוכל לבצע הוא שימוש ב – setInterval, ואז בצורה קלה מאוד נוכל להגדיר לולאת שתרוץ על פי קצב ריענון הגיוני.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;MyGame.fps = 60;

MyGame.update = &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
    &lt;span class="rem"&gt;// Move game parts&lt;/span&gt;
};

&lt;span class="rem"&gt;// Start the game loop&lt;/span&gt;
MyGame._intervalId = setInterval(Game.update, 1000 / Game.fps);

&lt;span class="rem"&gt;// To stop the game, use the following:&lt;/span&gt;
clearInterval(MyGame._intervalId);&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;FPS – כדי שהעין שלנו תראה “אנימציה” בעצם צריך להזיז רצף תמונות במהירות מסוימת, אם התמונות יזוז לאט מידי נוכל לראות שזה לא אנימציה. המינימום FPS שצריך על מנת ליצור את התחושה שמדובר באנימציה הוא – 17 FPS.&lt;/p&gt;
&lt;p dir="rtl"&gt;למרות שיצירת לולאת משחק יכול להיראות פשוט מאוד עדיין אני הולך לדבר על ספריה בשם EASE&lt;strong&gt;JS&lt;/strong&gt;, ספריית EASE&lt;strong&gt;JS &lt;/strong&gt;נותנת תמיכה בעבודה עם Canvas ב – HTML 5 ועוזרת בצורה משמעותית לפיתוח משחקים, והיא מכילה אובייקט בשם – &lt;strong&gt;Ticker&lt;/strong&gt; שישמש אותנו כלולאת המשחק.&lt;/p&gt;
&lt;p dir="rtl"&gt;ראשית נוריד את - &lt;a title="http://www.createjs.com/#!/EaselJS" href="http://www.createjs.com/#!/EaselJS"&gt;http://www.createjs.com/#!/EaselJS&lt;/a&gt; ונפתח דף HTML חדש, נוסיף קישור אל הקבצים שהורדנו.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/geom/Matrix2D.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/geom/Rectangle.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/events/EventDispatcher.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/utils/UID.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/utils/Ticker.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/utils/SpriteSheetUtils.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/DisplayObject.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/Container.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/Stage.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/SpriteSheet.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/BitmapAnimation.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/Graphics.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/Bitmap.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;js/easeljs/display/Text.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="rtl"&gt;נוסיף ל – Body את אובייקט ה – &lt;strong&gt;Canvas&lt;/strong&gt; ונקרא לו – &lt;strong&gt;gameCanvas&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;canvas&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;gameCanvas&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;600&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;canvas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;כעת בואו נתחיל לעבוד עם ספריית EASE&lt;strong&gt;JS, &lt;/strong&gt;דבר ראשון שנחנו צריכים הוא ליצור אובייקט חדש מסוג – &lt;strong&gt;Stage&lt;/strong&gt;. &lt;br /&gt;&lt;strong&gt;Stage&lt;/strong&gt; יחזיק את אובייקט ה – &lt;strong&gt;Canvas&lt;/strong&gt; של המשחק וכל פעם שלולאת המשחק תבוצע ה – &lt;strong&gt;Stage&lt;/strong&gt; יעדכן את האובייקטים תחתיו.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;stage = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Stage(id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;כעת מה שנשאר לעשות הוא להוסיף תמונה למשחק שלכם, בעזרת שימוש בפונקציית Bitmap אשר מקבל נתיב לתמונה, נוסיף את התמונה לתוך ה – &lt;strong&gt;Stage&lt;/strong&gt; בעזרת קריאה ל – &lt;strong&gt;stage.addChild&lt;/strong&gt; ונעביר אליו את התמונה שלנו.&lt;/p&gt;
&lt;p dir="rtl"&gt;לאחר מכן נגדיר את קצב הרענון של המשחק על 30 FPS , בעזרת קריאה ל – &lt;strong&gt;(createjs.Ticker.setFPS(30.&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="rtl"&gt;ודבר אחרון הוא להירשם לאירוע (Event) בשם – &lt;strong&gt;tick, &lt;/strong&gt;פונקציית tick תופעל כל 33.33 מאיות השניה (1000/30).&lt;/p&gt;
&lt;p dir="rtl"&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; stage, image, fpstext;
&lt;span class="kwrd"&gt;function&lt;/span&gt; init() {
    stage = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Stage(id(&lt;span class="str"&gt;&amp;quot;gameCanvas&amp;quot;&lt;/span&gt;));
    image = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Bitmap(&lt;span class="str"&gt;&amp;quot;assets/Player.png&amp;quot;&lt;/span&gt;);

    stage.addChild(image);

    createjs.Ticker.setFPS(30);
    createjs.Ticker.addEventListener(&lt;span class="str"&gt;&amp;quot;tick&amp;quot;&lt;/span&gt;, tick);
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;כעת כל מה שנשאר לנו הוא לעדכן את המשחק ברגע שפונקציית &lt;strong&gt;tick&lt;/strong&gt; מבוצעת, בשלב הנוכחי אני מזיז את התמונה 10 פיקסלים ימינה , במידה והתמונה הגיעה ל – 600 פיקסלים (קצה תחום משחק) אני מחזיר את התמונה ל – 0. לאחר שביצענו את השינויים נקרא ל – &lt;strong&gt;stage.update &lt;/strong&gt;על מנת לעדכן את ה – Canvas בהתאם לשינויים שביצענו.&lt;/p&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; tick() {
    image.x += 10;

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (image.x &amp;gt; 600)
        image.x = 0;

    stage.update();
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_6788DE6F.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3A27489F.png" width="779" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p dir="rtl"&gt;&lt;a href="http://tinyurl.com/Super8-Demo1" target="_blank"&gt;כניסה לדוגמא&lt;/a&gt;&lt;/p&gt;
&lt;p dir="rtl"&gt;עכשיו נוסיף למשחק שלנו שורה טקסט בעזרת שימוש באובייקט – &lt;strong&gt;Text&lt;/strong&gt;, עוד דוגמא לשימוש הקל בעבודה עם &lt;strong&gt;Canvas&lt;/strong&gt; בעזרת EASE&lt;strong&gt;JS.&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="rtl"&gt;האובייקט טקסט שנוסיף יציג את מהירות ה – FPS של המשחק, נוסיף את הקוד הבא תחת פונקציית ה - &lt;strong&gt;init&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;fpstext = &lt;span class="kwrd"&gt;new&lt;/span&gt; createjs.Text(&lt;span class="str"&gt;&amp;quot;fps:&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;20px Arial&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;#7a1567&amp;quot;&lt;/span&gt;);
fpstext.x = 0;
fpstext.y = 20;
stage.addChild(fpstext);&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;ולסיום תחת פונקציית &lt;strong&gt;tick&lt;/strong&gt; נוסיף את השורה הבאה&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;fpstext.text = Math.round(createjs.Ticker.getMeasuredFPS()) + &lt;span class="str"&gt;&amp;quot; fps&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="rtl"&gt;וזאת התוצאה שנקבל:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_620A47FE.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_38B30000.png" width="776" height="448" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;p dir="rtl"&gt;&lt;a href="http://tinyurl.com/Super8-Demo1" target="_blank"&gt;כניסה לדוגמא&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1784309" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/IpvG_ukRYJI" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Sela+Group/default.aspx">Sela Group</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Games/default.aspx">Games</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/EASEJS/default.aspx">EASEJS</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/07/javascript-8-1.aspx</feedburner:origLink></item><item><title>איך להגדיר ימי חופש של סבב פיתוח - יום שישי במקום ראשון</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/nZUdaKvVsCw/1776335.aspx</link><pubDate>Sun, 03 Mar 2013 10:42:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1776335</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1776335</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/03/1776335.aspx#comments</comments><description>&lt;p dir="rtl"&gt;אחד השינויים ב – TFS 11 מאפשר לנו להגדיר קבוצות פיתוח והגדרה של סבבי פיתוח עם תאריך התחלה וסיום (Sprint, Iteration וכו).&lt;/p&gt;

&lt;p dir="rtl"&gt;כאשר מתחילים לתכנן סבב פיתוח נראה חישוב של סה”כ ימי העבודה בסבב הנוכחי, אך סה”כ הימים לא יסתדר לכם כי הוא מחשב שיום ראשון אינו יום עבודה.&lt;/p&gt;

&lt;p dir="rtl"&gt;זאת שאלה שאני מקבל מהרבה לקוחות – איך אני משנה את תצוגת ה – Backlog שתתאים לימי המנוחה בארץ (שישי ושבת ולא שבת וראשון).&lt;/p&gt;

&lt;p dir="rtl"&gt;לדוגמא – אם הגדרנו סבב פיתוח מה – 3 לפברואר עד ה – 14 לפברואר – מדובר על &lt;strong&gt;12&lt;/strong&gt; &lt;u&gt;ימים סה”כ&lt;/u&gt; ו-&lt;strong&gt;10&lt;/strong&gt;&amp;#160;&lt;u&gt;ימי פיתוח&lt;/u&gt; אבל אנחנו נראה סה”כ 9 ימי פיתוח. (שני ימי ראשון + יום שבת = שלושה ימי חופש).&lt;/p&gt;

&lt;p dir="rtl"&gt;&lt;a&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/photos/shair/images/1776318/original.aspx" width="858" height="459" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;על מנת לסגר את TFS 11 שיתמוך בימי החופש בארץ נצטרך להשתמש בפקודת – witadmin שתאפשר לנו לשלוף את קובץ ההגדרות עבור ניהול הפרוייקט.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;witadmin&lt;/strong&gt; &lt;strong&gt;exportcommonprocessconfig&lt;/strong&gt; /&lt;strong&gt;collection&lt;/strong&gt;:&lt;a href="http://tfsServer:8080/tfs"&gt;http://tfsServer:8080/tfs&lt;/a&gt; /&lt;strong&gt;f&lt;/strong&gt;:e:\projectConfig.xml /&lt;strong&gt;p&lt;/strong&gt;:ProjectName&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;לאחר שהרצנו פקודה זאת ניפתח את הקובץ ונחפש את הטקסט הבא:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Weekends&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sunday&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Saturday&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Weekends&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CommonProjectConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;נשנה את הערך -&amp;#160; Sunday ל – Friday, נשמור את הקובץ.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Weekends&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;font style="background-color:#ffff00;"&gt;Friday&lt;/font&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Saturday&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DayOfWeek&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Weekends&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CommonProjectConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;לבסוף יש להריץ את אותה הפקודה אך במקום export נכתוב import:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;witadmin&lt;/strong&gt; &lt;strong&gt;importcommonprocessconfig&lt;/strong&gt; /&lt;strong&gt;collection&lt;/strong&gt;:&lt;a href="http://tfsServer:8080/tfs"&gt;http://tfsServer:8080/tfs&lt;/a&gt; /&lt;strong&gt;f&lt;/strong&gt;:e:\projectConfig.xml /&lt;strong&gt;p&lt;/strong&gt;:ProjectName&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;עכשיו אפשר להתחיל לעבוד!&lt;/p&gt;

&lt;p dir="rtl"&gt;&lt;a&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/photos/shair/images/1776319/original.aspx" width="848" height="475" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p dir="rtl"&gt;תהנו!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1776335" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/nZUdaKvVsCw" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WorkItem+Tracking/default.aspx">WorkItem Tracking</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Work+Items/default.aspx">Work Items</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web+Access/default.aspx">Web Access</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Questions/default.aspx">Questions</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/witadmin/default.aspx">witadmin</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+11/default.aspx">TFS 11</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/03/03/1776335.aspx</feedburner:origLink></item><item><title>הרצת בדיקות על דפדפנים שונים עם Coded UI Testing</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/Ka220Q4N9P8/coded-ui-testing.aspx</link><pubDate>Thu, 21 Feb 2013 00:05:53 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1757113</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1757113</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/coded-ui-testing.aspx#comments</comments><description>&lt;p dir="rtl"&gt;לאחרונה נתקלתי במספר טענות שלא ניתן להריץ בדיקות Coded UI&amp;#160; על דפדפנים שונים למעט Internet Explorer, אז רק להבהיר – &lt;strong&gt;אכן אפשר!&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;אתם צריכים את הדברים הבאים על מנת שהתוסף יעבוד ויאפשר לכם להריץ בדיקות Coded UI על דפדפנים שונים:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;Visual Studio 2012 Update 1&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Chrome 21+&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Firefox 15+&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;IE 9/10&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Windows 7,8 and Server 2008 R2 SP1&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;במידה ואתם עובדים עם Visual Studio 2010 אין צורך לשדרג את השרת, רק להתקין Visual Studio 2012 שיכול לעבוד במקביל עם Visual Studio 2010.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;ראשית יש להוריד את &lt;a href="http://visualstudiogallery.msdn.microsoft.com/11cfc881-f8c9-4f96-b303-a2780156628d" target="_blank"&gt;Selenium components for Coded UI Cross Browser Testing&lt;/a&gt; או תוכלו להשתמש ב – Visual Studio Extension &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Tools –&amp;gt; Extensions and Updates… –&amp;gt; Online –&amp;gt; Search for = Cross Browser &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0B31966A.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_299BD753.png" width="669" height="464" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;לאחר ההתקנה יש להוריד את הדברים הבאים:      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://chromedriver.googlecode.com/files/chromedriver_win_23.0.1240.0.zip" target="_blank"&gt;Chrome Driver&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://selenium.googlecode.com/files/selenium-dotnet-2.25.1.zip" target="_blank"&gt;Selenium dot net bindings&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;אחרי שסיימתם להוריד יש להעתיק את התוכן שלהם לספריה המצויינת מטה, מ – Selenium יש להעתיק את התוכן של net40)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;C:\Program Files\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages&amp;quot; (for 32 bit machines) &lt;/li&gt;    &lt;li&gt;&amp;quot;C:\Program Files (x86)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages&amp;quot; (for 64 bit machines) &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;אחרי שסיימנו עם ההתקנות כל מה שנשאר הוא להקליט בדיקה בעזרת Coded UI ולשנות את הערך של BrowserWindow.CurrentBrowser לדפדפן שאתם מעוניינים להריץ עליו את הבדיקה.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;[TestMethod]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Simple_CUIT_For_WebSite()
{
    BrowserWindow.CurrentBrowser = &lt;span class="str"&gt;&amp;quot;chrome&amp;quot;&lt;/span&gt;; &lt;span class="rem"&gt;//&amp;quot;firefox&amp;quot;&lt;/span&gt;
    &lt;span class="rem"&gt;//Coded UI Methods.....&lt;/span&gt;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;סיימתם, עכשיו בדיקות Coded UI יכולות לרוץ על FireFox ו – Google Chrome&lt;/p&gt;

&lt;p dir="rtl"&gt;תהנו!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1757113" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/Ka220Q4N9P8" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Coded+UI+Test/default.aspx">Coded UI Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/coded-ui-testing.aspx</feedburner:origLink></item><item><title>TFS API Part 49 – Delete Team Project</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/2k0nT0_qvjU/tfs-api-part-49-delete-team-project.aspx</link><pubDate>Wed, 20 Feb 2013 19:08:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1757008</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1757008</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/tfs-api-part-49-delete-team-project.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/21/tfs-api-part-49-delete-team-project.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;There are many improvements in TFS API for 2012 version, in my previous post I’ve talked about &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/tfs-api-part-48-workitemcontrol-and-bypass-work-item-rules.aspx" target="_blank"&gt;TFS API Part 48 – WorkItemControl And Bypass Work Item Rules&lt;/a&gt; that allow work item creation with &lt;strong&gt;bypass&lt;/strong&gt; rule mode in WorkItemStore that allow you to create and change any field value without applying the WorkItem template rules.&lt;/p&gt;  &lt;p&gt;in this post I’ll show how to delete Team Project using TFS API, be aware Delete Team Project is unrecoverable!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_028946EC.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_32337746.png" width="449" height="554" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1756990/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 1: Connect TFS and Getting Team Projects&lt;/h2&gt;  &lt;p&gt;Create WPF Application, and add the basic code for connecting TFS and collecting all Team Projects under that collection.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; TfsTeamProjectCollection _tfs;
&lt;span class="kwrd"&gt;private&lt;/span&gt; WorkItemStore _store;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnConnect_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var tpp = &lt;span class="kwrd"&gt;new&lt;/span&gt; TeamProjectPicker(TeamProjectPickerMode.NoProject, &lt;span class="kwrd"&gt;false&lt;/span&gt;);
    tpp.ShowDialog();

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (tpp.SelectedTeamProjectCollection != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        _tfs = tpp.SelectedTeamProjectCollection;
        _store = &lt;span class="kwrd"&gt;new&lt;/span&gt; WorkItemStore(_tfs);
        GetTeamProjects();
    }
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetTeamProjects()
{
    projectsList.ItemsSource = _store.Projects;
}&lt;/pre&gt;
&lt;/blockquote&gt;



&lt;h2&gt;Step 2: Using TeamProjectDeleter&lt;/h2&gt;

&lt;p&gt;To delete Team Project we need to use a new API called – &lt;strong&gt;TeamProjectDeleter, &lt;/strong&gt;you can find this dll here - &lt;em&gt;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ReferenceAssemblies\v4.5\Microsoft.TeamFoundation.DeleteTeamProject.dll..&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;First create new &lt;strong&gt;TeamProjectDeleter&lt;/strong&gt; object and pass the &lt;strong&gt;TfsCollection&lt;/strong&gt;, &lt;strong&gt;Team Project name&lt;/strong&gt; and &lt;strong&gt;force&lt;/strong&gt; property.&lt;/p&gt;

&lt;p&gt;You can also specify if you want to delete the Team Project WSS and finally calling the delete method to perform the Team Project delete operation.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnDelete_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (projectsList.SelectedItem == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

    var project = (Project)projectsList.SelectedItem;

    var force = chxForce.IsChecked == &lt;span class="kwrd"&gt;true&lt;/span&gt; ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    &lt;span class="kwrd"&gt;try&lt;/span&gt;
    {
        var deleter = &lt;span class="kwrd"&gt;new&lt;/span&gt; TeamProjectDeleter(_tfs, project.Name, force);
        deleter.StatusEvent += deleter_StatusEvent;

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (deleter.HasWssToDelete)
            deleter.ExcludeWss = chxExcludeWss.IsChecked == &lt;span class="kwrd"&gt;true&lt;/span&gt; ? &lt;span class="kwrd"&gt;true&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;;

        var result = MessageBox.Show(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;You are about to delete \&amp;quot;{0}\&amp;quot; project, are you sure you want to continue?&amp;quot;&lt;/span&gt;,
            project.Name), &lt;span class="str"&gt;&amp;quot;Delete Team Project&amp;quot;&lt;/span&gt;, MessageBoxButton.OKCancel, MessageBoxImage.Warning);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (result == MessageBoxResult.OK)
        {
            var t = &lt;span class="kwrd"&gt;new&lt;/span&gt; Thread(&lt;span class="kwrd"&gt;new&lt;/span&gt; ThreadStart(deleter.Delete));
            t.Start();
        }
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

&lt;span class="kwrd"&gt;void&lt;/span&gt; deleter_StatusEvent(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, TeamProjectDeleter.StatusEventArgs e)
{
    Execute ex = &lt;span class="kwrd"&gt;delegate&lt;/span&gt;()
    {
        txtLog.Text = e.message + Environment.NewLine + txtLog.Text;
    };
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Dispatcher.Invoke(ex);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1756990/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1757008" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/2k0nT0_qvjU" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2012/default.aspx">TFS 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/tfs-api-part-49-delete-team-project.aspx</feedburner:origLink></item><item><title>TFS API Part 48 – WorkItemControl And Bypass Work Item Rules</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/QvBv076kO2Y/tfs-api-part-48-workitemcontrol-and-bypass-work-item-rules.aspx</link><pubDate>Wed, 20 Feb 2013 17:28:30 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1756712</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1756712</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/tfs-api-part-48-workitemcontrol-and-bypass-work-item-rules.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/tfs-api-part-48-workitemcontrol-and-bypass-work-item-rules.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;It’s been a while since I wrote about TFS API, not because there is no more about it is because I worked on Windows Store for the past couple of months so I didn’t had the time.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx" target="_blank"&gt;More About TFS API&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So today post will be about two changes in TFS 2012, the first one is &lt;strong&gt;&lt;u&gt;WorkItemControl &lt;/u&gt;&lt;/strong&gt;based on WPF that replaced the &lt;strong&gt;WorkItemFormControl &lt;/strong&gt;based on WinForms, the second will be about &lt;strong&gt;WorkItemStore&lt;/strong&gt; bypass rule – Allowing you to save and change work item values without obeying the work item rules.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_53BD4600.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3757B615.png" width="1112" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1756707/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 1: Connect TFS&lt;/h2&gt;  &lt;p&gt;First create WPF application using Visual Studio 2012 and connect TFS using &lt;strong&gt;TeamProjectPicker&lt;/strong&gt; API.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnConnect_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var pick = &lt;span class="kwrd"&gt;new&lt;/span&gt; TeamProjectPicker(TeamProjectPickerMode.NoProject, &lt;span class="kwrd"&gt;false&lt;/span&gt;);
    pick.AcceptButtonText = &lt;span class="str"&gt;&amp;quot;I want this Team Project!&amp;quot;&lt;/span&gt;;
    pick.ShowDialog();

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (pick.SelectedTeamProjectCollection != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        _tfs = pick.SelectedTeamProjectCollection;
        &lt;span class="rem"&gt;//WorkItemStoreFlags - Enum used to determine behavior of work item store object&lt;/span&gt;
        _store = &lt;span class="kwrd"&gt;new&lt;/span&gt; WorkItemStore(_tfs, WorkItemStoreFlags.BypassRules);
        btnShowWits.IsEnabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Please select Team Project&amp;quot;&lt;/span&gt;);
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;h2&gt;Step 2: Query Work Items&lt;/h2&gt;

&lt;p&gt;No just for demo purpose I using the Store object to query all items in the collection.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnShowWits_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var workItems = _store.Query(&lt;span class="str"&gt;&amp;quot;SELECT [System.Id] FROM WorkItems&amp;quot;&lt;/span&gt;);

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (workItems.Count &amp;gt; 0)
    {
        btnShowWit.IsEnabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        workItemsList.ItemsSource = workItems;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 3: Bypass WorkItemStore Rules&lt;/h2&gt;

&lt;p&gt;The interesting part in TFS 2012 that you can create the &lt;strong&gt;WorkItemStore&lt;/strong&gt; object and specify if you want to work in &lt;strong&gt;BypassRule &lt;/strong&gt;mode.&lt;/p&gt;

&lt;p&gt;The Bypass Rule allow you to modify the work item fields without any restrictions, for example you can change “&lt;strong&gt;Created Date&lt;/strong&gt;”, or “&lt;strong&gt;Created By&lt;/strong&gt;” – that normally are blocked for changes.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; chxBypassRules_Checked(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (_tfs == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
    _store = &lt;span class="kwrd"&gt;new&lt;/span&gt; WorkItemStore(_tfs, WorkItemStoreFlags.BypassRules);
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; chxBypassRules_Unchecked(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (_tfs == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
    _store = &lt;span class="kwrd"&gt;new&lt;/span&gt; WorkItemStore(_tfs, WorkItemStoreFlags.None);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 4: Show Work Item Control&lt;/h2&gt;

&lt;p&gt;After we specify the WorkItemStore mode we want to work with and have selected a Work Item from the list we want to display him outside Visual Studio using &lt;strong&gt;WorkItemControl.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;WorkItemControl &lt;/strong&gt;needs the Item property set to the work item you want to display (or new work item), then create new Window object and set the &lt;strong&gt;WorkItemControl &lt;/strong&gt;as the new Windows Content.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnShowWit_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (workItemsList.SelectedItem == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

    _witControl = &lt;span class="kwrd"&gt;new&lt;/span&gt; WorkItemControl();
    _witControl.Item = (WorkItem)workItemsList.SelectedItem;


    _container = &lt;span class="kwrd"&gt;new&lt;/span&gt; Window();
    _container.Content = _witControl;

    _container.Show();

    btnShowErrors.IsEnabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnShowErrors_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    _witControl.ShowAllFieldErrors(&lt;span class="str"&gt;&amp;quot;Error Title&amp;quot;&lt;/span&gt;, 99);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1756707/download.aspx" target="_blank"&gt;&lt;font size="3" face="Arial"&gt;Download Demo Project&lt;/font&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Arial"&gt;Enjoy&lt;/font&gt;&lt;/pre&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1756712" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/QvBv076kO2Y" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WorkItem+Tracking/default.aspx">WorkItem Tracking</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Work+Items/default.aspx">Work Items</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2012/default.aspx">TFS 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/tfs-api-part-48-workitemcontrol-and-bypass-work-item-rules.aspx</feedburner:origLink></item><item><title>Run Windows Store Apps From Desktop</title><link>http://feedproxy.google.com/~r/ShaiRaiten/~3/bYRgdI-BwpQ/run-windows-store-apps-from-desktop.aspx</link><pubDate>Thu, 07 Feb 2013 14:09:49 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1736848</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1736848</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/07/run-windows-store-apps-from-desktop.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/07/run-windows-store-apps-from-desktop.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;When customers ask me how they can run Windows Store app from Desktop usually the answer is – &lt;strong&gt;You Can’t, &lt;/strong&gt;but if you really want there is a way to do that.&lt;/p&gt;  &lt;p&gt;The reason I usually answer is You Can’t is because – In order to run Windows Store app from Desktop you need to install &lt;a href="http://msdn.microsoft.com/en-US/windows/apps/jj572486" target="_blank"&gt;Windows App Certification Kit&lt;/a&gt;, this pack contains “&lt;strong&gt;microsoft.windows.softwarelogo.appxlauncher.exe&lt;/strong&gt;” file that can run a Windows Store app by his application model id.&lt;/p&gt;  &lt;p&gt;So if you plan on publishing your app you can’t assume the ACK is installed on the client machine.&lt;/p&gt;  &lt;p&gt;Again, if you really want… Let me show you.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_11119BD1.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_75C91D02.png" width="907" height="538" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1736841/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 1: Getting Started&lt;/h2&gt;  &lt;p&gt;First create a WPF project and add the following reference:&lt;/p&gt;  &lt;p&gt;“C:\Program Files (x86)\Windows Kits\8.0\App Certification Kit\microsoft.windows.softwarelogo.shared.dll”&lt;/p&gt;  &lt;h2&gt;Step 2: Getting Windows App List&lt;/h2&gt;  &lt;p&gt;The reason you need to add reference to “Microsoft.Windows.Softwarelogo.Shared.dll” so we can receive the program inventory xml file, this file contains the complete list of all installed Windows Store apps.&lt;/p&gt;  &lt;p&gt;Under my PC here is the file location - &lt;u&gt;&amp;quot;C:\\Users\\Shai\\AppData\\Local\\Microsoft\\AppCertKit\\programinventory_e25bb752-e7cf-4fb2-8194-874ba9b91c7b.xml&amp;quot;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;As I said this file contains all Windows Store app installed on you machine, each Program element under that file will show all the information regarding that specific app.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_70B6B986.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_268B88D4.png" width="924" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So, how do you get the file location?&lt;/p&gt;  &lt;p&gt;It’s very simple, using &lt;strong&gt;GlobaldataAccessor&lt;/strong&gt; method from &lt;strong&gt;softwarelogo.shared.dll&lt;/strong&gt; you can get the Program Inventory Location string.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; itemValue = GlobalDataAccessor.GetItemValue(&lt;span class="str"&gt;&amp;quot;ProgramInventoryLocation&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;PRE_PROCESS&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you got this file all you need is parsing the XML and create a collection on Apps.&lt;/p&gt;

&lt;p&gt;I’ve create a &lt;strong&gt;ProductInfo&lt;/strong&gt; class that will represent each Program in the file, as you can see from the code below I simply taking the attributes and elements from the Program element.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductInfo : INotifyPropertyChanged
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NotifyPropertyChanged(String propertyName = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (PropertyChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                PropertyChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName));
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _Status;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Status
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _Status; }
            set
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; != &lt;span class="kwrd"&gt;this&lt;/span&gt;._Status)
                {
                    &lt;span class="kwrd"&gt;this&lt;/span&gt;._Status = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
                    NotifyPropertyChanged(&lt;span class="str"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;);
                }
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LogoUrl { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductName { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductVendor { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductLanguage { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductVersion { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; RootDirPath { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Id { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; PackageFullName { get; set; }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductInfo(XmlNode xNode)
        {
            var attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductName = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Version&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductVersion = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Language&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductLanguage = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Publisher&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductVendor = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;RootDirPath&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) RootDirPath = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Id&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) Id = attrib.Value;

            var node = xNode.SelectSingleNode(&lt;span class="str"&gt;&amp;quot;/Log/ProgramList/Program[@Id=&amp;#39;&amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Id + &lt;span class="str"&gt;&amp;quot;&amp;#39;]/Indicators/PackageManifestIndicator/Properties/Logo&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(node.InnerText))
            {
                var imgUrl = System.IO.Path.Combine(RootDirPath, node.InnerText);
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (File.Exists(imgUrl))
                    LogoUrl = imgUrl;
            }

            node = xNode.SelectSingleNode(&lt;span class="str"&gt;&amp;quot;/Log/ProgramList/Program[@Id=&amp;#39;&amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Id + &lt;span class="str"&gt;&amp;quot;&amp;#39;]/Indicators/PackageManifestIndicator/PackageManifest&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(node.Attributes[&lt;span class="str"&gt;&amp;quot;PackageFullName&amp;quot;&lt;/span&gt;].InnerText))
            {
                PackageFullName = node.Attributes[&lt;span class="str"&gt;&amp;quot;PackageFullName&amp;quot;&lt;/span&gt;].InnerText;
            }
        }
    }&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And now, let’s connect the two part together, the first thing is getting the &lt;strong&gt;ProgramInventorylocation&lt;/strong&gt; and after that just load that Xml file and parse it to objects with the information you want.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildAppsList()
{
    &lt;span class="kwrd"&gt;string&lt;/span&gt; itemValue = GlobalDataAccessor.GetItemValue(&lt;span class="str"&gt;&amp;quot;ProgramInventoryLocation&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;PRE_PROCESS&amp;quot;&lt;/span&gt;);

    XmlNodeList list = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
    var reportDoc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();
    reportDoc.Load(itemValue);
    ProductList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;ProductInfo&amp;gt;();

    list = reportDoc.GetElementsByTagName(&lt;span class="str"&gt;&amp;quot;Program&amp;quot;&lt;/span&gt;);
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (list.Count &amp;lt; 1)
    {
        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlException();
    }
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (XmlNode node &lt;span class="kwrd"&gt;in&lt;/span&gt; list)
    {
        ProductInfo item = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProductInfo(node);
        ProductList.Add(item);
    }

    dbTable.ItemsSource = ProductList;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 3: Get App User Model Id&lt;/h2&gt;

&lt;p&gt;Now after you got all Windows Store app installed on your machine it’s time to run them. In order to run a Windows Store app you’ll need to obtain the &lt;strong&gt;AppUserModelId,&lt;/strong&gt; the reason you need to &lt;strong&gt;AppUserModelId &lt;/strong&gt;is because the &lt;u&gt;appxlauncher.exe&lt;/u&gt; needs this value in order to launch the application. (Package Name is not enough).&lt;/p&gt;

&lt;p&gt;After completing Step 2 we got the App Package Full Name, we need to use this value to find the &lt;strong&gt;AppUserModelId&lt;/strong&gt; from registry.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;HKEY_CURRENT_USER\Software\Classes\ActivatableClasses\Package\**PackageFullName**\Server&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0811221E.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_2F1BBB93.png" width="911" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So let’s add the following method, this method receive a &lt;strong&gt;packageFullName&lt;/strong&gt; string and perform a search in the registry for the &lt;strong&gt;AppUserModelId&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetAppUserModelId(&lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName)
{
    &lt;span class="kwrd"&gt;string&lt;/span&gt; str = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (RegistryKey key = Registry.CurrentUser.CreateSubKey(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;@&amp;quot;SOFTWARE\Classes\ActivatableClasses\Package\{0}\Server\&amp;quot;,&lt;br /&gt;                                                                               packageFullName)))
    {
        if (key == null) return str;

        var appKeys = from k in key.GetSubKeyNames()
                        where !k.StartsWith(&amp;quot;&lt;/span&gt;BackgroundTransferHost&lt;span class="str"&gt;&amp;quot;)
                        select k;

        foreach (var appKey in appKeys)
        {
            using (RegistryKey serverKey = key.OpenSubKey(appKey))
            {
                if (serverKey.GetValue(&amp;quot;&lt;/span&gt;AppUserModelId&lt;span class="str"&gt;&amp;quot;) != null)
                {
                    str = serverKey.GetValue(&amp;quot;&lt;/span&gt;AppUserModelId&amp;quot;).ToString();
                    serverKey.Close();
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }
        }
    }

    &lt;span class="kwrd"&gt;return&lt;/span&gt; str;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 4: Running Windows Store App&lt;/h2&gt;

&lt;p&gt;After we have the &lt;strong&gt;AppUserModelId &lt;/strong&gt;string for a specific Windows Store app we can run it.&lt;/p&gt;

&lt;p&gt;You can test it by opening command line and write the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;C:\Program Files (x86)\Windows Kits\8.0\App Certification Kit\Microsoft.Windows.SoftwareLogo.AppxLauncher.exe &lt;strong&gt;&lt;u&gt;“AppUserModelId”&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Start App Button&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StartApp_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var product = ((System.Windows.Controls.Button)sender).Tag &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductInfo;
    var appUserModelId = Helpers.GetAppUserModelId(product.PackageFullName);

    var exec = &lt;span class="str"&gt;@&amp;quot;C:\Program Files (x86)\Windows Kits\8.0\App Certification Kit\Microsoft.Windows.SoftwareLogo.AppxLauncher.exe&amp;quot;&lt;/span&gt;;

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!File.Exists(exec))
    {
        System.Windows.MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Please install Windows App Certification Kit for Windows RT&amp;quot;&lt;/span&gt;);
    }

    var processInfo = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProcessStartInfo()
    {
        Arguments = appUserModelId,
        UseShellExecute = &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        CreateNoWindow = &lt;span class="kwrd"&gt;true&lt;/span&gt;,
        FileName = exec
    };

    Process.Start(processInfo);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 5: Get Application Status&lt;/h2&gt;

&lt;p&gt;The last thing you might want is to know the App execution state, in order to do that you need to use &lt;strong&gt;IPackageDebugSettings - &lt;/strong&gt;Enables debugger developers control over the lifecycle of a Windows Store app, such as when it is suspended or resumed. (&lt;a title="http://msdn.microsoft.com/en-us/library/hh438393(v=vs.85).aspx" href="http://msdn.microsoft.com/en-us/library/hh438393(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/hh438393(v=vs.85).aspx&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt; for that create a &lt;strong&gt;PackageStatushelper&lt;/strong&gt; class with the following code:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PackageStatusHelper
{
    [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D&amp;quot;&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PackageDebugSettings
    {
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; PACKAGE_EXECUTION_STATE
    {
        PES_UNKNOWN,
        PES_RUNNING,
        PES_SUSPENDING,
        PES_SUSPENDED,
        PES_TERMINATED
    }

    [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;F27C3930-8029-4AD1-94E3-3DBA417810C1&amp;quot;&lt;/span&gt;), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IPackageDebugSettings
    {
        &lt;span class="kwrd"&gt;int&lt;/span&gt; EnableDebugging([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, [MarshalAs(UnmanagedType.LPWStr)]&lt;br /&gt;                                                              &lt;span class="kwrd"&gt;string&lt;/span&gt; debuggerCommandLine, IntPtr environment);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; DisableDebugging([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; Suspend([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; Resume([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; TerminateAllProcesses([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; SetTargetSessionId(&lt;span class="kwrd"&gt;int&lt;/span&gt; sessionId);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; EnumerageBackgroundTasks([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, &lt;br /&gt;                                                      &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; taskCount, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; intPtr, [Out] &lt;span class="kwrd"&gt;string&lt;/span&gt;[] array);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; ActivateBackgroundTask(IntPtr something);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StartServicing([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StopServicing([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StartSessionRedirection([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, &lt;span class="kwrd"&gt;uint&lt;/span&gt; sessionId);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StopSessionRedirection([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; GetPackageExecutionState([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName,&lt;br /&gt;                                            &lt;span class="kwrd"&gt;out&lt;/span&gt; PACKAGE_EXECUTION_STATE packageExecutionState);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; RegisterForPackageStateChanges([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, &lt;br /&gt;                               IntPtr pPackageExecutionStateChangeNotification, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; pdwCookie);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; UnregisterForPackageStateChanges(&lt;span class="kwrd"&gt;uint&lt;/span&gt; dwCookie);
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; PACKAGE_EXECUTION_STATE GetPackageExecutionState(&lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName)
    {
        PACKAGE_EXECUTION_STATE packageExecutionState = PACKAGE_EXECUTION_STATE.PES_UNKNOWN;
        PackageDebugSettings settings = &lt;span class="kwrd"&gt;new&lt;/span&gt; PackageDebugSettings();
        IPackageDebugSettings settings2 = (IPackageDebugSettings)settings;
        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (settings2.GetPackageExecutionState(packageFullName, &lt;span class="kwrd"&gt;out&lt;/span&gt; packageExecutionState) != 0)
            {
                System.Windows.MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Failed to get package execution state.&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;GetPackageExecutionState&amp;quot;&lt;/span&gt;);
            }
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message, &lt;span class="str"&gt;&amp;quot;GetPackageExecutionState&amp;quot;&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; packageExecutionState;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And from the application you can just call the GetPackageExecutionState passing the Package Full Name&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetAppStatus_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var btn = (System.Windows.Controls.Button)sender;
    var product = btn.Tag &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductInfo;
    var status = PackageStatusHelper.GetPackageExecutionState(product.PackageFullName);

    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (status)
    {
        &lt;span class="kwrd"&gt;case&lt;/span&gt; PackageStatusHelper.PACKAGE_EXECUTION_STATE.PES_RUNNING:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Green);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Running&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;case&lt;/span&gt; PackageStatusHelper.PACKAGE_EXECUTION_STATE.PES_SUSPENDED:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Orange);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Suspended&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;case&lt;/span&gt; PackageStatusHelper.PACKAGE_EXECUTION_STATE.PES_TERMINATED:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Red);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Terminated&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;default&lt;/span&gt;:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Gray);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Unkown&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1736841/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1736848" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShaiRaiten/~4/bYRgdI-BwpQ" height="1" width="1"/&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Metro+Style/default.aspx">Metro Style</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+8/default.aspx">Windows 8</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Metro/default.aspx">Metro</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Store/default.aspx">Windows Store</category><feedburner:origLink>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/07/run-windows-store-apps-from-desktop.aspx</feedburner:origLink></item></channel></rss>
