一、新手引导须要的遮罩效果

一般做新手引导的时候,会把游戏画面变的半黑,然后须要玩家点击的地方就亮起来。经常使用的做法是採用遮罩来实现,可是仅仅能实现方形的,不能不规则图形。以及是全然挖空。做不到渐变效果(除非美术直接出整张资源)。表现效果例如以下:



实事上,我们想做把那个透明框做得更自然一点,更好看一点。

也就是相似火把,点光源的效果。比方以下游戏的画面那样:



比較效果。肯定是相似点光源酷多了。

既然要这种效果,那肯定得出我们图像混合大法了。

二、AS3实现的相似点光源效果

  1. 这里是採用一张美术出的具有渐变效果的图片来实现相似点光源的效果的。美术图例如以下:

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VqdW4xMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">

    实际上。想要更好的效果,美术能够把这个图片做得更精细一些,这里我把角色阴影来做的。

    假设想要实现点光源的动画效果,那么出多几张这个图片,形成动画效果就能够了。

  2. 实现使用的API
DisplayObject.blendMode属性
BlendMode 类中的一个值。用于指定要使用的混合模式。

用到了BlendMode类的两个属性

LAYER : String = "layer"
[静态] 强制为该显示对象创建一个透明度组。
ERASE : String = "erase"
[静态] 依据显示对象的 Alpha 值擦除背景。

有看过我之前文章的读者,可能会发现这API眼熟。没错,是我上篇Blog一样的实现原理

页游《火影忍者》角色和背景遮挡半透明效果的实现

使用的API和使用方法一摸一样。

3. 终于实现的效果图:



4.代码下载地址

2DAS3游戏地图角色遮罩和点光源

选择里面的PointLightTest.as运行看效果

三、代码实现过程

package
{
import flash.display.Bitmap;
import flash.display.BlendMode;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent; /**
* 地图透明角色測试样例
* @author sodaChen
* Date:2017-2-16
*/
[SWF(width="1274",height="768")]
public class PointLightTest extends Sprite
{
/** 背景 **/
[Embed(source = "res/alpha/bg.jpg")]
private var bgClass:Class;
/** 透明遮罩背景 **/
[Embed(source = "res/alpha/alphaBg.png")]
private var alphaBgClass:Class;
/** 角色 **/
[Embed(source = "res/alpha/role.png")]
private var roleClass:Class;
/** 角色容器 ,用来存放角色和透明图像的**/
private var roleContainer:Sprite;
/** 角色层。仅仅放角色 **/
private var roleLayer:Sprite; //点光源图片(这里拿了人物脚底阴影放大来用)
[Embed(source = "res/alpha/shadow.png")]
private var shadowClass:Class; public function PointLightTest()
{
super();
addEventListener(Event.ADDED_TO_STAGE,onStage);
}
private function onStage(evt:Event):void
{
//加入背景
addChild(new bgClass()); //加入角色容器
roleContainer = new Sprite();
//强制为该显示对象创建一个透明度组
roleContainer.blendMode = BlendMode.LAYER;
addChild(roleContainer); //创建角色层,事实上角色能够不用单独容器。可是必须保证alphaBg在全部角色的最上面
roleLayer = new Sprite();
roleContainer.addChild(roleLayer); //创建角色并加入到角色容器中
createRole(300,120);
createRole(230,550);
//不会被遮挡的角色
createRole(400,200); //依据显示对象的 Alpha 值擦除背景.这个透明图像必须在最顶层。确保以下的角色会被擦出
var alphaBg:Bitmap = new alphaBgClass();
alphaBg.blendMode = BlendMode.ERASE;
roleContainer.addChild(alphaBg); /////////////////////////////文本的正式測试代码啦/////////////////////////////
//新建一个专门做点光源的顶层容器
var topContainer:Sprite = new Sprite();
topContainer.mouseEnabled = false;
//强制为该显示对象创建一个透明度组
topContainer.blendMode = BlendMode.LAYER;
addChild(topContainer);
//创建半透的黑色遮罩
var mask:Shape = new Shape();
//颜色能够选自己喜欢的
mask.graphics.beginFill(0x000000);
mask.graphics.drawRect(0,0,1274,768);
mask.graphics.endFill();
mask.alpha = 0.5;
topContainer.addChild(mask); //制作点光源,事实上就是新手引导里的光亮部分。 效果挺酷的。比遮罩那种一个方形的框好看多了
var pointBitmap:Bitmap = new shadowClass();
//依据显示对象的 Alpha 值擦除背景,就是那个半透的黑色遮罩
pointBitmap.blendMode = BlendMode.ERASE;
pointBitmap.x = 290; pointBitmap.y = 70;
pointBitmap.width = 300; pointBitmap.height = 400;
var role:Sprite = new Sprite();
role.addEventListener(MouseEvent.MOUSE_DOWN,onMouse);
role.addEventListener(MouseEvent.MOUSE_UP,onMouse);
role.addChild(pointBitmap);
topContainer.addChild(role); }
private function createRole(roleX:int,roleY:int):void
{
var role:Sprite = new Sprite();
var roleBitmap:Bitmap = new roleClass();
role.x = roleX;
role.y = roleY;
role.addChild(roleBitmap);
roleLayer.addChild(role);
role.addEventListener(MouseEvent.MOUSE_DOWN,onMouse);
role.addEventListener(MouseEvent.MOUSE_UP,onMouse);
}
private function onMouse(evt:MouseEvent):void
{
var role:Sprite = evt.currentTarget as Sprite;
if(evt.type == MouseEvent.MOUSE_DOWN)
role.startDrag();
else
role.stopDrag();
}
}
}

2D游戏新手引导点光源和类迷雾实现的更多相关文章

  1. 2D游戏平滑的迷雾战争效果

    近期刚好有做2D游戏的点光源效果,然后就扩展一下.研究了一下战争迷雾的效果.主要是想实现相似魔兽争霸那种人物走动,然后黑色的战争迷雾随着人物的移动渐渐打开的效果.使用具有渐变透明图片作为光源来使得战争 ...

  2. IOS 2D游戏开发框架 SpriteKit

    最近发现Xcode自带的2D游戏开发框架SpriteKit可以直接引入到APP中进行混合开发,这就是说可以开发出既带业务应用又带游戏的苹果APP,咋怎么觉得这是一个自己的小发现....呵呵....., ...

  3. 2d游戏和 3d游戏的区别

    2D游戏和3D游戏的主要区别 一.总结 一句话总结:2D中的单位就是贴图,3D中的单位还有高 1. 3D 和 2D 游戏的区别主要体现在呈现画面和文件体积上: 2. 借助 3D 引擎可以提升 2D 游 ...

  4. UWP简单示例(三):快速开发2D游戏引擎

    准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...

  5. UWP简单示例(三):快速开发2D游戏引擎

    准备 IDE:Visual Studio 图形 API:Win2D MSDN 教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面你需要考虑图形.输入和网络 以及相对独立的 ...

  6. 【Unity3D】利用Shader以及更改Mesh实现2D游戏的动态阴影效果

    最近看到一个非常有趣的益智小游戏,是一个盗贼进入房子偷东西的, 其实这种游戏市面上已经很多了,吸引我的是那个类似手电筒的效果, 主角走到哪里,光就到哪里,被挡住的地方还有阴影.有点类似策略游戏里的战争 ...

  7. Atitit 开发2d游戏的技术选型attilax总结

    Atitit 开发2d游戏的技术选型attilax总结 1.1. 跨平台跨平台:一定要使用跨平台的gui技术,目前最好的就是h5(canvas,webgl,dom) +js了..1 1.2. 游戏前后 ...

  8. 发布HTML5 2D游戏引擎YEngine2D

    关于YEngine2D YEngine2D是一个开源的.采用HTML5技术和Javscript语言创建的2D游戏框架,用来构建web二维游戏. GitHub地址 最新版本 v0.1.2 浏览器支持 C ...

  9. QLGame 2d Engine 搭建2d游戏原理

    大家好,2d引擎基于opengl(es) 3d技术,是因为这样比之前的ddraw有很多好处! 1.坐标采用浮点数,可以进行曲线移动 2.如果在ddraw的对图片进行缩放和旋转的时候,是基于点像素的操作 ...

随机推荐

  1. 迪米特法则(Law of Demeter, LoD)

    一个软件实体应当尽可能少地与其他实体发生相互作用 未完待续

  2. Jetty部署

    http://www.orchome.com/127 https://blog.csdn.net/zhanngle/article/details/77591526

  3. optional

    public class Test { public static void main(String[] args) { People people = new People(); Optional& ...

  4. sed & awk之sed

    sed处理文本的方法 sed在处理文本时,会先读取第一个输入行,将编辑命令应用于输入行,然后读取下一个输入行,并应用编辑命令.sed总是处理最新版本的行,因此sed中有多个编辑命令时,编辑命令的顺序对 ...

  5. BZOJ2243 洛谷2486 [SDOI2011]染色 树链剖分

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2243 题目传送门 - 洛谷2486 题意概括 一棵树,共n个节点. 让你支持以下两种操作,共m次操 ...

  6. POJ1487 Single-Player Games 高斯消元

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1487 题解概括 给出多个树形结构,由小写字母和数字表示,每个小写字母表示一棵小树.现在,以a为根节点 ...

  7. 第六章|网络编程-socket开发

    1.计算机基础 作为应用开发程序员,我们开发的软件都是应用软件,而应用软件必须运行于操作系统之上,操作系统则运行于硬件之上,应用软件是无法直接操作硬件的,应用软件对硬件的操作必须调用操作系统的接口,由 ...

  8. 004.Kickstart部署之FTP架构

    一 准备 1.1 完整架构:Kickstart+DHCP+VSFTP+TFTP+PXE 1.2 组件应用 Kickstart服务端IP:172.24.8.12 DHCP:提供客户端IP,网关,镜像路径 ...

  9. 不要再用if(xxx != null)或者try catch NullPointerException了,Optional可以帮你解决

    public static void testIfPresent() { Map<String, Map<String, String>> map = new HashMap& ...

  10. 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)

    首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...