学习 Actionscript 3.0+Flash 与 C# 的对比

113 阅读2分钟

一位有 Python 编程背景的开发者想要学习一门新语言,并对游戏开发感兴趣。他考虑学习 C# 和 Action Script,前者可以用于制作 XBLA 游戏,后者可以用于制作 Flash 游戏。他询问哪种语言更适合长期学习。

2、解决方案

1、C#

一位开发者建议学习 C#,因为它提供了广泛的应用场景:

  • 可以用它在台式机上使用 XNA 来编写游戏;
  • 也可以用 XNA 来编写 Xbox 游戏;
  • 此外,借助 XNA 和 XNA Touch,还能用 C# 开发移动设备游戏;
  • 而使用 Silverlight,则可以在网络上编写游戏。

相比之下,Action Script 只能用于制作 Flash 游戏,应用场景较为有限。

2、Action Script

另一位开发者则认为 Action Script 3/Flash 更适合学习游戏开发,因为它具有以下优势:

  • 可以非常快速地制作游戏;
  • 其次,可以让大量的用户更快地提供反馈,这是任何其他环境都无法比拟的。

虽然并非所有游戏都能获得如此多的关注,但使用 Flash,可以更容易地制作出能让大量人实际玩到并提供反馈的游戏。而学习如何制作出优秀的游戏,比学习一门新的编程语言要困难得多。

3、结论

总的来说,C# 具有更广泛的应用场景,而 Action Script 则更适合快速制作游戏并获得用户反馈。两种语言各有优势,开发者可以根据自己的需求和兴趣做出选择。

代码例子

以下是一个用 C# 编写的游戏代码示例:

using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

public class Game1 : Game
{
    private GraphicsDeviceManager _graphics;
    private SpriteBatch _spriteBatch;
    private Texture2D _playerTexture;
    private Vector2 _playerPosition;
    private float _playerSpeed;

    public Game1()
    {
        _graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
        IsMouseVisible = true;
    }

    protected override void Initialize()
    {
        _playerPosition = new Vector2(100, 100);
        _playerSpeed = 5f;

        base.Initialize();
    }

    protected override void LoadContent()
    {
        _spriteBatch = new SpriteBatch(GraphicsDevice);
        _playerTexture = Content.Load<Texture2D>("player");
    }

    protected override void Update(GameTime gameTime)
    {
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            Exit();

        KeyboardState keyboardState = Keyboard.GetState();
        if (keyboardState.IsKeyDown(Keys.Up))
            _playerPosition.Y -= _playerSpeed;
        if (keyboardState.IsKeyDown(Keys.Down))
            _playerPosition.Y += _playerSpeed;
        if (keyboardState.IsKeyDown(Keys.Left))
            _playerPosition.X -= _playerSpeed;
        if (keyboardState.IsKeyDown(Keys.Right))
            _playerPosition.X += _playerSpeed;

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        _spriteBatch.Begin();
        _spriteBatch.Draw(_playerTexture, _playerPosition, Color.White);
        _spriteBatch.End();

        base.Draw(gameTime);
    }
}

以下是一个用 Action Script 3 编写的游戏代码示例:

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.geom.Point;

    public class Player extends MovieClip
    {
        private var _speed:Number = 5;

        public function Player()
        {
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

        private function onEnterFrame(event:Event):void
        {
            if (Keyboard.isKeyDown(Keyboard.UP))
                y -= _speed;
            if (Keyboard.isKeyDown(Keyboard.DOWN))
                y += _speed;
            if (Keyboard.isKeyDown(Keyboard.LEFT))
                x -= _speed;
            if (Keyboard.isKeyDown(Keyboard.RIGHT))
                x += _speed;
        }
    }
}