Уроки Flash: Создаем Metro Siberia Undeground (Часть 2)Источник: demiart Emanuele Ferontano (Перевод: Stasan)
Это вторая часть уроков, посвященных созданию игры MSU. Если вы незнакомы с первой частью, то перед продолжением, я настоятельно рекомендую вам ознакомиться с ней. Называем этот символ tunnel и ставим linkage. CODE
1. import flash.filters.GlowFilter; 2. var ship_filter:GlowFilter = new GlowFilter(0x00ff00, 0.8, 4, 4, 2, 3, false, false); 3. var smoke_filter:GlowFilter = new GlowFilter(0xff0000, 0.8, 4, 4, 2, 3, false, false); 4. var tunnel_filter:GlowFilter = new GlowFilter(0xffff00, 0.8, 4, 4, 2, 3, false, false); 5. gravity = 0.1; 6. thrust = 0.25; 7. yspeed = 0; 8. xspeed = 5; 9. distance = 0; 10. smoke_interval = 10000; 11. frames_passed = 0; 12. tunnel_height = 150; 13. engines = false; 14. _root.attachMovie("ship", "ship", _root.getNextHighestDepth(), {_x:150, _y:200}); 15. _root.createEmptyMovieClip("tunnel_movie", _root.getNextHighestDepth()); 16. ship.filters = new Array(ship_filter); 17. ship.onEnterFrame = function() { 18. if (engines) { 19. yspeed -= thrust; 20. smoke_interval -= 0.25; 21. } 22. yspeed += gravity; 23. this._y += yspeed; 24. angle = Math.atan2(yspeed, xspeed); 25. this._rotation = angle*180/Math.PI; 26. frames_passed++; 27. distance += xspeed; 28. if (distance>50) { 29. step = distance-50; 30. wall = tunnel_movie.attachMovie("tunnel", "tunnel"+tunnel_movie.getNextHighestDepth(), tunnel_movie.getNextHighestDepth(), {_x:525-step, _y:tunnel_height}); 31. wall.filters = new Array(tunnel_filter); 32. wall.onEnterFrame = function() { 33. this._x -= xspeed; 34. if (this._x<-25) { 35. this.removeMovieClip(); 36. } 37. }; 38. tunnel_height += Math.floor(Math.random()*40)-19; 39. distance = step; 40. } 41. if (frames_passed>=smoke_interval) { 42. sm = _root.attachMovie("smoke", "smoke"+_root.getNextHighestDepth(), _root.getNextHighestDepth(), {_x:this._x-2, _y:this._y}); 43. sm.filters = new Array(smoke_filter); 44. sm.onEnterFrame = function() { 45. this._x -= xspeed; 46. this._width += 0.2; 47. this._height += 0.2; 48. this._alpha -= 2; 49. if (this._alpha<=0) { 50. this.removeMovieClip(); 51. } 52. }; 53. frames_passed = 0; 54. } 55. if ((this._y> 400) or tunnel_movie.hitTest(this._x+28*Math.cos(angle), this._y+28*Math.sin(angle), true) or tunnel_movie.hitTest(this._x+8*Math.cos(angle+Math.PI/2), this._y+8*Math.sin(angle+Math.PI/2), true) or tunnel_movie.hitTest(this._x+8*Math.cos(angle-Math.PI/2), this._y+8*Math.sin(angle-Math.PI/2), true)) { 56. yspeed = 0; 57. this._y = 200; 58. tunnel_movie.removeMovieClip(); 59. _root.createEmptyMovieClip("tunnel_movie", _root.getNextHighestDepth()); 60. } 61. }; 62. _root.onMouseDown = function() { 63. engines = true; 64. smoke_interval = 10; 65. }; 66. _root.onMouseUp = function() { 67. engines = false; 68. smoke_interval = 100000; 69. }; Давайте разбираться, что к чему. |