本人现在刚刚学习C#,前几天按照视频教程做了个俄罗斯方块的游戏;
有天偶然重新玩了下是男人就下100层的游戏,相信大家都玩过吧,突然非常想去把它做出来,
以前也是想学好一种编程语言,但是都是学到皮毛就深入不下去了,有上班太忙时间不足的原因
但是我觉得主要原因还是兴趣不足,不能长期坚持。希望这次通过做小游戏的方法提高兴趣吧,让
自己坚持下去。希望大侠们多多指教啊
     现在有个问题:就是我不太清楚这个控制人物左右移动、滚轮台阶的动画效果是怎么实现的,
因为我的思路是用一系列图片来完成动画效果,但是我在网上搜了些这方面的资料,发现他们都是
通过一个图片把所有的动作放进去来实现的,这样的话我就不知道该怎么做了,我想这个肯定是很
基本的东西,但是由于我是新手啦,只好硬着头皮请教大侠们了。希望能详细指导下这块的实现方法,
如果有这一部分的代码能贴出来就更加完美了。
     感谢支持

解决方案 »

  1.   

    winform下效率太低.
    silverlight下有人写了开源的代码.楼主可查找.
      

  2.   

    winform下效率低?那是代码的写法不好吧,绘制动态图片一定要有双缓冲,不管用自己的还是系统提供的方法,基本就是在后台绘制完整张图再显示到前台
      

  3.   

    就算是用双缓冲,效率还是不行的,比如winform控件,都可以启用双缓冲,但效果怎么样,大家都清楚吧.
      

  4.   

    你会看到一个扇形在不停自我旋转然后再form的里面游走,碰到边缘会反弹
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace WindowsApplication77
    {
        public partial class Form1 : Form
        {
            Bitmap OrgBmp = null;
            int XPos = 0;
            int YPos = 0;
            int XStep = 1;
            int YStep = 1;
            int X = 0;        public Form1()
            {
                InitializeComponent();            OrgBmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
                using (Graphics G = Graphics.FromImage(OrgBmp))
                    G.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);            Thread T = new Thread(new ThreadStart(ShowThread));
                T.IsBackground = true;
                T.Start();
            }        void T_Tick(object sender, EventArgs e)
            {
                ShowThread();
            }        void ShowThread()
            {
                try
                {
                    while (true)
                    {
                        if (XPos + 30 > this.ClientRectangle.Width)
                            XStep = -1;
                        if (XPos < 0)
                            XStep = 1;
                        if (YPos + 30 > this.ClientRectangle.Height)
                            YStep = -1;
                        if (YPos < 0)
                            YStep = 1;
                        XPos += XStep;
                        YPos += YStep;
                        Bitmap CacheBmp = new Bitmap(OrgBmp);
                        using (Graphics G = Graphics.FromImage(CacheBmp))
                        {
                            X = X + 5 % 360;
                            G.FillPie(Brushes.Red, new Rectangle(XPos, YPos, 30, 30), X, 270);
                        }
                        this.Invoke(new DrawForm(DoDrawForm), new Object[] { CacheBmp });
                        Thread.Sleep(10);
                    }
                }
                catch
                {
                    // 退出程序忽略异常
                }
            }        delegate void DrawForm(Bitmap CacheBmp);        void DoDrawForm(Bitmap CacheBmp)
            {
                using (Graphics G = this.CreateGraphics())
                    G.DrawImage(CacheBmp, new Point(0, 0));
            }
        }
    }
      

  5.   

            void T_Tick(object sender, EventArgs e)
            {
                ShowThread();
            }是多余的,可以删掉