魔兽争霸魔兽争霸登录

在前头的几篇中入手实验应用了CC可口可乐、CCScene、CCLayer、CCAction、CCMenu等cocos2d-xna引擎中类方法,逐渐整合出一个充裕的界面系统,现在的游戏早已得以举行各样的操作,不过游戏部分还未曾正规的开头,所谓万丈高楼平地而起需要一步一步的实现,前边一篇制作了一个关卡采取,这么多的关卡该怎么着制作呢,本次我们运用CCTMXTiledMap来实现,并且求学一下Tiled地图制作工具——Tiled(是的自家没打错)。

魔兽争霸 1

资源准备和编辑

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

在创制关卡前,大家先要掌握一下地形图的结合然后准备一些材料和资源,你可以直接看其它的教程来表明结构,由于我们不需要统筹太复杂的关卡,所以例如阻挡物等不需考虑,地图很粗略就是方格组成,这里就需要下载一下Tiled编辑工具,它匡助Windows系统,下载地址:

namespace MyWarcraft
{
  
    public partial class FrmLogin : Form
    {
        public FrmLogin()
        {
            InitializeComponent();
        }

http://www.mapeditor.org/

        public LoginInfo[] array;             
//用于存储登录用户的信息
        private void FrmLogin_Load(object sender, EventArgs e)
        {
            //开首多少个用户音信
            array = new LoginInfo[10];
            LoginInfo info1 = new LoginInfo();
            info1.Name = “孙丽丽”;
            info1.Id = “120185198005088521”;
            info1.Email = “lili@sohu.com”;
            info1.Password = “lili1980”;
            array[0] = info1;
            LoginInfo info2 = new LoginInfo();
            info2.Name = “范晶晶”;
            info2.Id = “110186198111088725”;
            info2.Email = “jingjing@sina.com”;
            info2.Password = “jingjing”;
            array[1] = info2;
            LoginInfo info3 = new LoginInfo();
            info3.Name = “陈小坤”;
            info3.Id = “110125197905123571”;
            info3.Email = “xiaokun@sohu.com”;
            info3.Password = “chenkun”;
            array[2] = info3;

魔兽争霸 2

            lblValidation.Visible = false;//初叶时将表明提醒新闻隐藏
        }

下载For
Windows的本子安装,使用办法比War3(魔兽争霸3)的编辑器容易不知底多少,制作一张地图的流水线就是如此简单:

        private void btnLogin_Click(object sender, EventArgs e)
        {
            if (txtEmail.Text.Trim() == “” || txtPwd.Text.Trim() ==
“”)
            {
                MessageBox.Show(“用户名或密码不可以为空!”, “提醒”);
            }
            else
            {
                string userName = txtEmail.Text;
                string pwd = txtPwd.Text;
                bool isOK = false;
                foreach (LoginInfo item in array)
                {
                    if (item != null)
                    {
                        if (item.Email == userName && item.Password ==
pwd)
                        {
                            lblValidation.Visible = false;
                            isOK = true;
                            FrmMain fm = new FrmMain();
                            fm.lblName.Text = “欢迎,” +
item.Name;//将信息传送到主页面
                            fm.Show();
                            break;
                        }
                    }
                }
                if (isOK == false)
                {
                    lblValidation.Visible = true;
                    txtPwd.Text = “”;
                    txtPwd.Focus();
                }
            }

1、新建地图,设置新地图的音讯

        }
      
        
      
    
        private void llbRegist_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
        {
            FrmRegist fr = new FrmRegist();
            fr.fl = this;
            fr.Show();
            this.Hide();//登录窗体隐藏
        }

2、导入地图块

        private void picClose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

3、绘制

        private void pictureBox1_Click(object sender, EventArgs e)
        {

4、编辑数据

        }

5、保存

    }
}

下面就跑两遍这么些流程,先新建地图:

 

魔兽争霸 3

魔兽争霸 4

此处运用的是“正常”方向,横13块纵8块,64×64的地图格式,以后可以设想打造更加大的地形图,毕竟这是演习而且还会涉嫌到拖拽,我们松开将来再说。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

地图建立出来未来你会发现是一个绿色什么都未曾的世界,需要进入物体或者地表,在“地图”选项中选择“新图块”然后采纳你需要的图块资源:

namespace MyWarcraft
{

魔兽争霸 5魔兽争霸 6

    public partial class FrmRegist : Form
    {
        public FrmRegist()
        {
            InitializeComponent();
            lblEqualEmail.Visible = false;
            lblEqualPwd.Visible = false;
            lblInfo.Visible = false;
        }
        public FrmLogin fl;//登录窗体对象
        private void btnRegist_Click(object sender, EventArgs e)
        {
            lblInfo.Visible = false;
            if (txtName.Text.Trim() == “” || txtId.Text.Trim() == “” ||
txtEmail.Text.Trim() == “” || txtReEmail.Text.Trim() == “” ||
txtPwd.Text.Trim() == “” || txtRePwd.Text.Trim() == “”)
            {
                lblInfo.Visible = true;
                return;
            }
            bool isOK = true;
            LoginInfo info = new LoginInfo();
            info.Name = txtName.Text;
            info.Id = txtId.Text;
            if (txtEmail.Text == txtReEmail.Text)
            {
                info.Email = txtEmail.Text;
                lblEqualEmail.Visible = false;
            }
            else
            {
                isOK = false;
                lblEqualEmail.Visible = true;
            }
            if (txtPwd.Text == txtRePwd.Text)
            {
                info.Password = txtPwd.Text;
                lblEqualPwd.Visible = false;
            }
            else
            {
                isOK = false;
                lblEqualPwd.Visible = true;
            }

你需要输入宽高等消息,关于grass_ground.png的来源是透过地表的图块组合而成,它们在本来状态下是这般的:

            if (isOK)
            {
                MessageBox.Show(“恭喜,通过认证!”, “提醒”,
MessageBoxButtons.OK, MessageBoxIcon.Information);
                //找到数组中空闲的职务,将登记成功的目标传入
                for (int i = 0; i < fl.array.Length; i++)
                {
                    if (fl.array[i] == null)
                    {
                        fl.array[i] = info;
                        break;
                    }
                }
                fl.Visible = true;
                this.Close();
            }

魔兽争霸 7

        }

然后在比如TexturePackerGUI工具或者直接PS组合成为一张大图,组合大图的目标是为着节约资源和福利编辑,图片包可以在这边下载:

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

http://files.cnblogs.com/nowpaper/tmxmap.rar

        private void panel2_Paint(object sender, PaintEventArgs e)
        {

不需要太多的编写,直接在左侧的地形图块资源里甄选并且编辑,现在发布您的艺术细胞吧,设计美观的地表。。。

        }

魔兽争霸 8

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

把图层改一下名字改成ground,方便后续的军事管制:

        }

魔兽争霸 9

    }
}

今昔添加一个新的图层,放置一些标识物,用来帮忙游戏逻辑处理,在这里一定于给地图作了各样标签,在本游戏中,我们最急需标识消息是:

 

1、各方的大无畏诞生地方

 魔兽争霸 10

2、各方的小将出生地点

魔兽争霸,using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

所以你将图块往下找可以发现8个优良的图块,它们分属4个颜色每组五个,一个代表英雄,一个代表士兵出生点,程序在载入的时候会依照那一个图块进行逻辑处理,将大胆和士兵的出生点放置到科学的地方,而五个不同的颜料用来创建复杂交战关系关卡——谁说只有两拨对打吗。

namespace MyWarcraft
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

后天将新建的百般图层命名为“units”,然后遵照你的想法摆放吧,我是停放了左右两边:

        private void FrmMain_Load(object sender, EventArgs e)
        {
           
        }

魔兽争霸 11

        private void picClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

实在自己想用物体层来做的,然而很可惜的是cocos2d-xna当前版本无法读取到“物体”对象Tile的“gid”,所以不得不采纳图层来代表了。

 

对此游戏逻辑而言,在读取了这个地图数据后并无法知道何人是什么人,何人要打何人,士兵都是这里的,它们只是一个目录,没有配置信息,本次咱们用Tiled的自定义属性来编排简单的脚本,拔取第一个战士图块,点击右键选拔“图块属性”

魔兽争霸 12

编排音讯如下:

魔兽争霸 13

咱俩那多少个战士出生点的图块设置一个组id为1,那样具有的groupid为1的就是一伙的,类型id是soldier,同样大家编辑一下英雄:

魔兽争霸 14

首当其冲似乎多了一个对象id(targetid),这里代表的意思很粗略,就是它的攻击对象是groupid为2的仇人,前面士兵之所以不需要targetid是因为兵员有默认的所属关系,因为同一个势力里惟有一个英勇(当然了这是本身的平整设定,你可以品味添加所述的英武编队,能打造出来更是复杂的作战系统,在这边就不需要太深切讲解了),是不是还可以攻击更多吗,这就是继承处理问题了,在本篇里就不太多做验证。

当今保存一下,打开工程,将所生成的地图文件(tmx)和所用上的图块文件全部充足到Content里(可以友善树立目录),不要忘记将png图片输入格式举行处理,tmx文件输入和出口的管道为:TMX
Importer TMX Processor。

魔兽争霸 15

当今在打开SceneGame.cs文件,在构造函数里将事先的测试用的“背景图”代码删掉,添加新的代码如下:

CCTMXTiledMap map = CCTMXTiledMap.tiledMapWithTMXFile("TileMaps/Level0");
CCSize size = CCDirector.sharedDirector().getWinSize();
map.position = new CCPoint((size.width - map.contentSize.width) / 2, (size.height - map.contentSize.height)/2);
this.addChild(map);

 

好了,运行一下看望啊:

魔兽争霸 16

结语

地图关卡的造作学习已经到位,下一步就是编写逻辑了,可能还有更多的疑问好像没有解决,例如现在各类关卡采取都是一个地形图,那亟需统筹一个总关卡地图的数额,例如第一关对应的Level0.tmx,第二关对应是Level28.tmx等一定的卡子数据,当我们将一张地图关卡搞定的时候,其他的也就迎刃而解,在下一篇将就游戏深一步设计数据系统和逻辑流程。

本篇例子工程:https://github.com/Nowpaper/SanguoCommander_cocos2dxna_Sample
本例子项目名为:SanguoCommander5

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website