我是南通大学信管142班的学生,高中升大学的暑假曾经尝试着用gamemaker制作一个小型的RPG,由于当时毫无代码基础,经过半个暑假,角色勉强能够四向运动,按下A键创建一个定向的子弹,敌人也只是跟随角色直线移动,近身攻击。后来上了大一,这个游戏制作的梦想就一度破产了,发觉这个专业和编程虽然有联系,但是技能树和理想需要有一些偏差。大一学习计算机基础的过程中,了解到网页中能够播放音乐,视频和各种小型flash插件的强大拓展能力,当时也是做游戏之心不死,产生了一个naive的想法,能不能用网页做一个游戏(当时完全不知道HTML5,Js,php,C#等等语言)。所以在大一寒假自学了网页制作,包括HTML,Javascript,CSS,阅读了大量的网页小游戏代码(尽管一行也读不懂)。
在阅读这些小型游戏代码的过程中,我作为一个完全没有程序思维的人,对这些代码一头雾水,根本对屏幕上显示的动画与游戏的操作实现理解不能。这个读和写(几乎只是重打)的过程持续了大约一年多。到了大二寒假,忽然我在某一天,似乎可以读懂这些代码的内部逻辑了(迟钝#),真希望教材上能加上如何理解别人写的代码,这对刚开始学习的学生真是太不友好了。再后来,学习了HTML5的canvas元素的操作方法,用一个叫phaser的开源HTML5游戏库把之前高三暑假的小游戏重现了一下,代码很naive,300行左右。
大约就长这样---------
function fire(a, b, direction, p) {
game.time.events.add(Phaser.Timer.SECOND * 0.5, destory, this);//子弹存活时间
desbullet = 0;//子弹处于存活状态
if (direction == 1) {
for(;p>0;p--) { bullet = game.add.sprite(a + 16, b, 'bu');//子弹 下
playerfire_audio.play();
game.physics.enable(bullet, Phaser.Physics.ARCADE);
bullet.enablebody = true;
bullet.rotation = 1.57;
bullet.body.velocity.y = 300*p;
bulleta = 0;}
.......................
function kaka() {
if (cursors.A.isDown && desbullet == 1) {//前一个子弹不销毁,后一个子弹不打出
bulleta = 1;
}
else if (cursors.A.isUp && bulleta == 1 && desbullet == 1) {
fire(tank.position.x, tank.position.y, direction, 1);
}
else if (desbullet == 0) {
game.physics.arcade.overlap(bullet, enemies[0].tank, bulletHitene, null, this);//实现玩家子弹与敌人击打,敌人扣血
}
if (cursors.S.isDown && desbullet == 1) {//前一个子弹不销毁,后一个子弹不打出
fire(tank.position.x, tank.position.y, direction, 3);
game.physics.arcade.overlap(bullet, enemies[0].tank, bulletHitene, null, this);
}
else if (cursors.S.isUp && bulleta == 1 && desbullet == 1) {
bulleta = 1;
}
}
大二下学期和大三的数据库作业和网页信息管理系统大作业特别让人记忆深刻。虽然最后做出来了,但是实现词云获得本地服务器中的datafield数据让我花了不少时间。服务器为了线程安全,ASP代码是编译运行后传到客户端的,也就是说在服务器端不能直接把数据传到服务器端的HTML页面里(词云插件是找的网上的HTML实现)。所以我通过在ASP页面的C#脚本里把数据读取到服务器端的HTML元素中,再传给词云插件。
public partial class _Default : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e)
{
s1.Text = GridView1.Rows[0].Cells[2].Text;
s2.Text = GridView1.Rows[0].Cells[3].Text;
s3.Text = GridView1.Rows[0].Cells[4].Text;
s4.Text = GridView1.Rows[0].Cells[5].Text;
if( (string)Session["userRole"]!= "1")
Response.Redirect("Login.aspx");
}//-----------------------------------------------------------------------------------
后来,写的就很少了,主要看一些图书馆借来的书,中间对图形学和shader产生了极度的狂热,就在博客园找到了一篇milo大神的博客,js带你玩转计算机图形学,其中光线追踪和基本的图形学知识用简单的canvas元素写(实现)的简单易懂,算是让我终于看到了图形学究竟是个什么种类的领域。接着在大三寒假接触到了webgl这个大坑。现在还在坑里挣扎中。。。