这次公司要求做一个转盘抽奖游戏,后台程序不难,几天完工,但是前台的转盘难倒了我。我主要是做后台程序的,美工之类的很是差劲。刚开始想借助 络的力量,下载一个开源的转盘就可以了。但是, 上的软件要么不泄露源码要么收费。经过再三考虑决定用silverlight做一个。
先说一下思路,做两张图片,底部是一个转盘,上部覆盖一张透明的指针图片。然后让转盘图片旋转,指针固定,经过一段时间后,转盘图片停在某个角度。同时显示一个中奖提示。
下面是个人的核心代码:
然后写一下button的单击事件处理函数:
private void play_Click(object sender, RoutedEventArgs e)
{
play.Visibility = Visibility.Collapsed;
myDispatcherTimer.Start();
if (this.gift != Gift.未中奖)
{
play.Click -= new RoutedEventHandler(play_Click);
play.Click += new RoutedEventHandler(Nav_Click);
}
}
private void Nav_Click(object sender, RoutedEventArgs e)
{
HtmlWindow html = HtmlPage.Window;
html.Navigate(new Uri(“Client/Updatemail=” + email, UriKind.Relative));
}
在这个事件当中,设置了一个DispatcherTimer,下面是该timer的tick函数:
private void Timer_Tick(object sender, EventArgs e)
{
if (speed > 15)
speed–;
else
{
if (speed speed++;
}
myTransform.Angle = (myTransform.Angle + speed);
startTime = startTime.AddMilliseconds(50);
if (startTime.CompareTo(endTime) != -1)
{
if (gift == Gift.一等奖)
{
myTransform.Angle += 9;
myDispatcherTimer.Tick -= new EventHandler(Timer_Tick);
myDispatcherTimer.Tick += new EventHandler(Timer_Tick_three);
end.Content = “恭喜您中得一等奖,请点击顶部按钮填写信息以方便客服联系您!”;
}
else if (gift == Gift.二等奖)
{
myTransform.Angle += 3;
myDispatcherTimer.Tick -= new EventHandler(Timer_Tick);
myDispatcherTimer.Tick += new EventHandler(Timer_Tick_three);
end.Content = “恭喜您中得二等奖,请点击顶部按钮填写信息以方便客服联系您!”;
}
else if (gift == Gift.三等奖)
{
this.count = -1;
myTransform.Angle += 14;
myDispatcherTimer.Tick -= new EventHandler(Timer_Tick);
myDispatcherTimer.Tick += new EventHandler(Timer_Tick_three);
end.Content = “恭喜您中得三等奖,请点击顶部按钮填写信息,以方便客服联系您!”;
}
else
{
myDispatcherTimer.Stop();
end.Content = “谢谢参与,您未中奖!”;
end.Visibility = Visibility.Visible;
}
}
}
//本函数用来微调角度,以固定到某个奖品上面
private void Timer_Tick_three(object sender, EventArgs e)
{
myTransform.Angle += 8;
this.count++;
if (this.count == 3)
{
play.Visibility = Visibility.Visible;
play.Content = “填写信息”;
myDispatcherTimer.Stop();
end.Visibility = Visibility.Visible;
}
}
最后,该sl程序需要接收两个参数,在app.xaml.cs中修改如下:
private void Application_Startup(object sender, StartupEventArgs e)
{
MainPage page = new MainPage(e.InitParams[“gift”].ToString().Trim(), e.InitParams[“email”].ToString().Trim());
this.RootVisual = page;
}
这两个参数需要在调用xap的页面中设置:
好了,大功搞成!
下面是效果图:

相关资源:最强劲的加密软件TrueCrypt_Setup_7.1a_最强劲的越野车- 络攻防…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!