石家庄独立游戏开发小分队

创建于:2017-07-27

创建人: yishalee

17 信息 22 成员
RockHomeTown,可能新大陆就在这里。欢迎大家没事来聊聊,总会有收获。

学习日志:雪山兄弟和坦克大战

yishalee 2017-08-16

雪人兄弟

  1. 跳跃判断稍复杂,原地跳时只有下落的时候可以控制方向,左右跳自带方向 。一样是通过下落状态、方向来做判断分情况讨论。
  2. 同样用了马里奥里的父对象墙来检测判断。
  3. 魂斗罗向上闯关的那种站到上边后视野向上移动,这个好像只能通过代码实现,即改变view_yview[0]。这个应该写在end step事件里,不过目前写在step里肉眼也看不出区别。
  4. End step事件。比如我要改变视野的位置,上边那种效果如果用step事件就会出现一些绘图有位置偏移。举例来说,把改变视野位置的代码写在obj_ctrl里,然后同一步里要处理三件事情:绘制圆、运行obj_ctrl代码、绘制圆心。圆和圆心都要绘制在房间坐标【10,,10】处。假如说写在step里,那么圆不变,圆心房间坐标仍然是【10,10】,但是视野先发生了变化,于是圆心在视野里的位置就变了,于是最后在屏幕上发生了位置变化。
  5. 变量可以赋值为资源名称,比如可以在代码里写: brk=spr_break30; sprite_index=brk 打砖块和顶砖块。
  6. instanceID的应用,instance_create可以返回ID值。  如果obj需要其图像随着条件变化,比如顶头顶上的砖块会令原来的砖块(obj_wall)消失而产生一个对应碎砖块(obj_break),砖块有很多种,每种对应一种碎砖块的形象。生成什么sprite则根据碰到的wall的brk变量来决定(在每种wall的create event里已经写了 brk=spr_break01…02…..等等等)
  7. 用image_xscale控制人物朝向(1,-1)

=====================================================================

坦克大战

  1. 几个指令可以同时下达,但只需要响应其中一个,可以用else 。 比如需要角色不是自由移动而是同时只能在上下左右四个方向中的一个移动? :

if keyboard_check(ord('A')) {dx=-1;face=3}

Else { if keyboard_check(ord('D')) {dx=1;face=1}}

  1. 画墙新方法用双层for循环画墙
  2. 假设一个大子弹朝墙飞去,它接触到了两个墙,我想让接触到的墙消失,写在子弹里的代码是:

        With (other) Instance_destroy();

        Instance_destroy();

然后发现只有一面墙被摧毁了。 原因是一步中可以多次碰撞,即一步可以碰撞多个实例,碰到墙1后墙1和子弹就被摧毁了,所以墙二虽然也被碰到了但却没被摧毁。 解决方法是不在step事件里摧毁子弹而是stepend里摧毁:给子弹一个状态(打到墙=1,没打到=0),碰撞后不直接摧毁,在step end里检测如果state=1,再摧毁。

  1. 墙阻挡坦克的效果,也是预判断下一步碰撞的办法,矩形是图像的大小再加上下一步的坐标修正,如果不预判断而直接(x-7,y-7,x+7,y+7)的话,一旦碰撞了,就卡住了。马里奥也是预判断下一步的位置是否有碰撞,只不过用了线碰撞检测。


  1. 用一个obj去播放其他sprite的方法:draw_sprte(xxx,image_index,x,y).但是明显只有当obj的sprite和目标sprite子图数目相等才正常播放,因为sprite的image_index是调用object的。所以这个方法其实用处不大,并不能随心所欲做到没有obj就能播放sprite动画。验证方法:我用一个图像只有1帧的obj在draw事件里播放另一个4帧动画sprite,那么动画就定格了,当我把obj的图像改成4帧后,动画正常播放了。(但是视频里GM8 obj就一个子图却能播放动画。。)
  2. 67‘ 不让敌人斜向走是用else让上下左右不能同时触发。 坦克撞墙反向这个里面face的改变没懂,见(一些遇到的不明白的知识——红激坦克大战。)
  3. 按J发射子弹,子弹方向随坦克朝向而定,这个用一句代码就能实现,不用每个方向各写一行。

            if keyboard_check(ord('J')) && shoot_timer==0 && instance_number(obj_bullet)<2 //发射子弹

            {

            var tmp=instance_create(x,y,obj_bullet);

            tmp.speed=5;

            tmp.direction=90*face; //巧妙,四个方向的代码本来要写四句,这一句就行了。

            shoot_timer=30;

            }

  1. 用switch函数来做概率事件们。Case 0: 小概率 default: 大概率。比如随机移动。
  2. 敌人的移动AI可以复制玩家的然后再改,比如按键移动改成概率移动
(转发自:原日志地址

近期喜欢的会员

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册