The beta is over, let the game begin.
Download WordMix LIVE! from the Windows Phone 7 Marketplace
The more, the merrier!
The beta is over, let the game begin.
Download WordMix LIVE! from the Windows Phone 7 Marketplace
The more, the merrier!
We are inviting a limited number of people to download WML now (before it is visible in the marketplace) to help us test and make sure our server can handle the load. If you have some time to play this week, please download WML and try it out. Thanks!
WordMix is back! And this time we’ve kicked it up a notch! With this latest release, you can now play head-to-head in realtime against our entire community of word-forming-word-lovers. Choose the type of round you would like to play, from 1 to 4 minute rounds, choose your language, and then join the action. Just like our current version of WordMix, WordMix LIVE! supports German, French, Spanish and two forms of English.
Download WordMix LIVE! from the Windows Phone 7 Marketplace
The more, the merrier!
Cronos Labs is proud to announce our third release. WordMix, a fun and challenging word puzzle game for all ages is now available from the Microsoft Marketplace. Download the free app now: WordMix for WP7
UPDATE 1: WordMix review by the kind folks at WP7Lab.com.
UPDATE 2: WordMix review by the kind folks at BestWP7Games.com.
Using the supplied 6 letters, create as many words as you can in the time provided. WordMix is an excellent vocabulary building game. Choose any word to see its definition. We’ve included Hints, Skips, and Shuffles to assist beginning players.
Also featured in this release is an online leaderboard provided by Scoreloop. Share your Scoreloop community reputation with Pirates Assault, Frenzic, 1 to 50 and other great Windows Phone games.
This app makes use of your phone’s:
• data services
• music and video library
• owner identity
• phone security
This application is currently free for a limited time. Follow the jump to download the app now. WordMix for WP7
For more information, please check out our WordMix section where we will be posting answers to common questions and you can make suggestions for future releases. You can also email us at wordmix@cronoslabs.com.
As we have mentioned before, we wish Microsoft would provide the basic back-end services of “XBox Live” to all developers, even if they want to reserve some additional marketing tiers for the proven brands. Since they don’t, it’s great that 3rd parties like Scoreloop fill that gap. I like having a single public profile that I can share across multiple games. Being able to recover my progress when I change devices is a big plus, too.
Here is our list of games on Windows Phone which use Scoreloop. Please let us know if we missed any.
Any time I am told “copy & paste [anything]” in more than one place, I start looking for alternatives. So it was when I was following this guide to adding page transitions to DataHub.
20 lines of XAML for each of 40 XAML files. Luckily I identified this early on and came up with a clean solution: Each of my PhoneApplicationPages would inherit from a single class, which I called BasePage.
namespace DataHub
{
public class BasePage : PhoneApplicationPage
{
public BasePage()
{
NavigationInTransition navInTransition = new NavigationInTransition();
navInTransition.Backward = new SlideTransition { Mode = SlideTransitionMode.SlideDownFadeIn };
navInTransition.Forward = new SlideTransition { Mode = SlideTransitionMode.SlideUpFadeIn };
NavigationOutTransition navOutTransition = new NavigationOutTransition();
navOutTransition.Backward = new SlideTransition { Mode = SlideTransitionMode.SlideDownFadeOut };
navOutTransition.Forward = new SlideTransition { Mode = SlideTransitionMode.SlideUpFadeOut };
TransitionService.SetNavigationInTransition(this, navInTransition);
TransitionService.SetNavigationOutTransition(this, navOutTransition);
this.SetValue(TiltEffect.IsTiltEnabledProperty, true);
}
along with these changes to the start & end XAML tags for each page:
<dh:BasePage xmlns:dh="clr-namespace:DataHub"> ... </dh:BasePage>
Much cleaner! With this bit of infrastructure worked out, I could move on to the real heart of the app.
Little did I know how useful this BasePage would be further down the line. So much so, I think I’ll have one in all future projects even if it’s initally blank.
A new problem arose when I was impementing better-together-dynamicorientationchanges-and-transitionframe. I noticed that if my device was held landscape and then the page was navigated, both the transition and the orientation change animations were playing. This was a pretty jarring user experience, and obviously in this case I wanted the transition animation only.
I had a twitter conversation with @DavidAns who replied “Avoiding it’d require specific (tricky?) changes”.
Luckily, I already had BasePage in place, so the changes were not so tricky:
protected static HybridOrientationChangesFrame MyHybridOrientationChangesFrame
{
get { return (HybridOrientationChangesFrame)(((App)(App.Current)).RootFrame); }
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
MyHybridOrientationChangesFrame.IsAnimationEnabled = false;
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
UIHelper.SetTimeout(300, () =>
{
MyHybridOrientationChangesFrame.IsAnimationEnabled = true;
});
}
}
Another use for BasePage appeared when Aaron, our UX designer, decided to include a “home” button on every DataHub page. Not wanting to include a circular reference (*ahem* AMAZON *ahem*) and specifically WANTING the page transitions between the starting point and home, I let BasePage do some automatic “back” navigation when a MainViewModel property was set.
void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (!IsCurrentPage) return;
if (!IsMainPage)
{
if (e.PropertyName == "GoHome")
{
if (App.ViewModel.GoHome)
{
UIHelper.SetTimeout(100, () =>
{
this.NavigationService.GoBack();
});
}
}
}
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
MyHybridOrientationChangesFrame.IsAnimationEnabled = false;
IsCurrentPage = false;
App.ViewModel.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(ViewModel_PropertyChanged);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
App.ViewModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(ViewModel_PropertyChanged);
IsCurrentPage = true;
if (App.ViewModel.GoHome)
{
if (IsMainPage)
{
App.ViewModel.GoHome = false;
UIHelper.SetTimeout(300, () =>
{
MyHybridOrientationChangesFrame.IsAnimationEnabled = true;
});
}
else
{
UIHelper.SetTimeout(300, () =>
{
this.NavigationService.GoBack();
});
}
}
else
{
UIHelper.SetTimeout(300, () =>
{
MyHybridOrientationChangesFrame.IsAnimationEnabled = true;
});
}
}
This did require some careful coding any time a page needed to make use of OnNavigatedTo directly.
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (App.ViewModel.GoHome) return;
...
}
A final use for BasePage just came up for DataHub now that we are working on the Silverlight-based “desktop” version. I am sharing (linking) as much of the code between projects as possible, including the code-behind for the XAML files. BasePage is implemented as project-specific, handing all plumbing differences (and inheriting from System.Windows.Controls.Page instead of Microsoft.Phone.Controls.PhoneApplicationPage). More on this in a future blog post (if there is any interest…)
Regards,
Jason
The default global error handler in the WP7 project template is really not all that helpful:
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
// An unhandled exception has occurred; break into the debugger
System.Diagnostics.Debugger.Break();
}
}
Sure, it’s fine during development. But do you know what happens to your app in production if there is an unhandled exception? Your app crashes and exits with no explanation to the user, and no feedback to you to prevent it from happening again. I guess the idea is that you’ll find & handle every possible exception during development. Chances of that happening on an app of any complexity at all: 0%. Interesting to note that an app which crashes & exits this way violates the Marketplace submission guidelines.
Here is one alternative:
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e){
if (System.Diagnostics.Debugger.IsAttached)
{
// An unhandled exception has occurred; break into the debugger
System.Diagnostics.Debugger.Break();
}
else
{
OnAnyError(e.ExceptionObject);
}
e.Handled = true; //optional
}
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e){
if (System.Diagnostics.Debugger.IsAttached)
{
// A navigation has failed; break into the debugger
System.Diagnostics.Debugger.Break();
}
else
{
OnAnyError(e.Exception);
}
e.Handled = true; //optional
}
private void OnAnyError(Exception e){
if (MessageBox.Show("May I send the details of this error to the developer? That way they can fix it so it doesn't happen again. I'll show you the entire message before it's sent.", "Application error", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.To = "[app]@[dev].com";
emailComposeTask.Subject = "An error in [app] " + VersionNumber;
emailComposeTask.Body = e.ToString();
emailComposeTask.Show();
}
}
This does a few things:
Notice also the message asks permission to initiate contact, which I think is important.
I am not ashamed to say I have received a few of these emails for DataHub. Every email I received I replied to individually without using a form letter. The structure was something like this:
[user name],
Thank you so much for sending your error report. I have been able to reproduce your problem and it will be fixed in our upcoming [#] release. In the meantime, the workaround is to [insert details].Regards,
Jason
And then I have gotten multiple replies like this:
Wow! That’s the best support from a dev I have experienced in a while, thanks for replying so quickly.
Happy customer here!![]()
Wow – thanks Jason! Didn’t expect a response at all.
=)Ceci mis à part : super software !!!
Très cordialementHi Jason
I can’t recreate it either now. [more details]
Hope that helpsthanks for app
And reviews like:
Great app, amazing support…
Any question you might have will be answered in no time by a very friendly and committed support. I am looking forward to the desktop version of the app. Great app, great dev…
…and the developpers team seems to be really motivated.
Regards,
Jason
Our latest app DataHub is now an official entrant in RedGates Window Phone 7 Competition. Check out our entry page here and be sure to click the “LIKE” button so we can grab the judges attention! Wish us luck!
Interested in our latest application for Windows Phone 7? Watch a quick introduction to DataHub.