`

Starling常见问题解决办法

 
阅读更多

Starling常见问题解决办法

来自:智慧 + 毅力 = 无所不能

 

1、Android设备上阻止用户按下后退后的行为

侦听按键事件

复制代码
//阻止后退行为
view.stage.addEventListener(KeyboardEvent.KEY_UP,keyboardHandler);
/**
* 当用户按下后退,强制程序关闭
*/       
protected function keyboardHandler(event:KeyboardEvent):void
{
        if(event.keyCode == Keyboard.BACK)
        {
                event.preventDefault();
                event.stopPropagation();
                NativeApplication.nativeApplication.exit();
        }
}
复制代码

 2、怎么让程序只能横着,不能竖着。但是可以翻转

首先在XML设置中,不要启动landscape模式,就是像下面这样注释掉就可以:

 

<!--<aspectRatio>landscape</aspectRatio>-->

然后打开允许自动翻转:

<autoOrients>true</autoOrients>

然后在应用启动之后,用代码设置为横屏模式:

stage.setOrientation(StageOrientation.ROTATED_LEFT);

然后侦听屏幕翻转事件,阻止不需要的模式:

复制代码
//only support landscape mode
stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, onOrientationChanging );
/**only support landscape mode*/
private function onOrientationChanging(event:StageOrientationEvent):void 
{
    // If the stage is about to move to an orientation we don't support, lets prevent it 
    // from changing to that stage orientation. 
    if(event.afterOrientation == StageOrientation.UPSIDE_DOWN || event.afterOrientation == StageOrientation.DEFAULT ) 
        event.preventDefault();
}
复制代码

Starling屏幕自适应方法
参考连接:
http://www.starlinglib.com/wiki/StarlingManual:%E5%A4%9A%E5%B1%8F%E5%B9%95%E5%88%86%E8%BE%A8%E7%8E%87%E7%9A%84%E5%BC%80%E5%8F%91
1>首先获得手机屏幕的宽高,也就是你要显示的范围的大小
//竖屏
//                private var screenWidth:int  = stage.fullScreenWidth;  
//                private var screenHeight:int = stage.fullScreenHeight;        
//横屏
        private var screenWidth:int  = stage.fullScreenHeight;  
        private var screenHeight:int = stage.fullScreenWidth;
注意的是横屏和竖屏宽高赋值要调转
2>获得1个长方形的显示空间的对象
private var viewPort:Rectangle = new Rectangle(0, 0, screenWidth, screenHeight)
把要显示的starling初始化时候把长方形对象插入到第三个参数
  myStarling = new Starling(MainGame,stage,viewPort);
设置starling中要显示画面的大小
                        myStarling.stage.stageWidth  = 480;
                  myStarling.stage.stageHeight = 320;
完成!

 

3、两个手机应用可以互相调用吗

在使用Adobe AIR进行移动应用开发的时候,我们或许会有这样的需求:假如我们开发的是两个应用(A和B),同时安装到手机上,那么能否在A中呼叫B并传递参数呢(或者反过来B操作后,再把参数返回给A)。

目前AIR还没有直接呼叫某个APP的API,但我们可以使用手机特有的特性来实现。可以使用ANE,借助原生代码来实现,也可以使用自定义的URI来实现。具体教程参见:

Adobe AIR研究小组:Adobe AIR移动App的互相调用实现方式

更新:在Adobe AIR 3.5 beta中已经原生添加了这个特性

4、AIR移动应用对图标尺寸的要求是什么?

答:主要是看发布平台对图标的尺寸要求,以目前应用最广泛的iOS和Android平台的要求为准,我们应该准备的图片尺寸是:

  • Android: 24*24,32*32,36*36,48*48,72*72
  • iOS: 29*29,48*48,57*57,58*58,72*72,96*96,114*114,144*144,512*512

5、AIR for iOS应用如何限定最低系统版本

答:如果您的应用使用到了最新的iOS系统才支持的功能,就必须在应用中做一些限定了,防止不符合条件要求的系统安装了应用而导致无法运行。

方式是在XML配置中增加:

<key>MinimumOSVersion</key>
<string>5.0.1</string>

6、Starling中如何裁切纹理

答:通过Image.setTexCoords()方法,可以改变四边形顶点对于的纹理的UV坐标(取值范围0-1),这样可以实现对纹理的一个矩形区域的裁切。比如我们只需要显示纹理右下方1/4的区域,可以这样设置:

复制代码
img.setTexCoords(0,new Point(0.5,0.5));
img.setTexCoords(1,new Point(1,0.5));
img.setTexCoords(2,new Point(0.5,1));
img.setTexCoords(3,new Point(1,1));
 
//TIPS: Starling中两个三角形组成一个四边形,而四边形的4个顶点的索引以及其位置是:
0 1
2 3
复制代码

7、如何在Starling中平铺图片?

答:设置texture.repeat为true,并且设置image的UV坐标。

代码示例:

复制代码
var birdTex:Texture = Texture.fromBitmap(new birdBMPClass() as Bitmap);
birdTex.repeat = true;
var bird:Image = new Image(birdTex);
bird.width = 960;
bird.height = 640;
bird.setTexCoords(1, new Point(bird.width/birdTex.width, 0));
bird.setTexCoords(2, new Point(0, bird.height/birdTex.height));
bird.setTexCoords(3, new Point(bird.width/birdTex.width, bird.height/birdTex.height));
addChild(bird);
复制代码

 

8、如何将多个纹理合并成一个纹理?

复制代码
/**
 * 克隆可视对象到一个图片
 * @param target    可视目标对象
 * @param persistent    指明纹理在经过多次绘制之后是否是持久的
 * @return 
 */        
public static function clone(target:DisplayObject, persistent:Boolean = false):Image
{
    if (!target)
    {
        return null;
    }
    var texture:RenderTexture = new RenderTexture(target.width, target.height, persistent);
    if (target is DisplayObjectContainer)
    {
        texture.drawBundled(function():void
        {
            var num:int = DisplayObjectContainer(target).numChildren;
            for (var i:int = 0; i < num; i++)
            {
                texture.draw(DisplayObjectContainer(target).getChildAt(i));
            }
        });
    }
    else
    {
        texture.draw(target);
    }
    return new Image(texture);
}
复制代码

 

9、如何解决Starling应用放大之后,图片之间的间隙?

答:这可能是Stage3D在纹理取样时的算法造成的。

方式1:使用TextureSmoothing.NONE。比如:

var image1:TestImage = new TestImage(sAssets.getTexture("test"));
image1.smoothing = TextureSmoothing.NONE;

方式2:设置图像显示区域的偏移量,来避免这个问题:

复制代码
package
{
    import starling.display.Image;
    import starling.textures.Texture;
    import flash.geom.Point;
    import flash.utils.setTimeout;
 
    /**
     * 根据缩放,自动调整尺寸的Image
     */    
    public class TestImage extends Image
    {
        public static var offset:Number = 0;
 
        public function TestImage(texture:Texture)
        {
            super(texture);
            if(offset>0)
            {
                setPositions();
            }
        }
 
        private function setPositions():void
        {
            var w:Number = super.width+offset;
            var h:Number = super.height+offset;
            mVertexData.setPosition(0,0-offset,0-offset);
            mVertexData.setPosition(1,w,0-offset);
            mVertexData.setPosition(2,0-offset,h);
            mVertexData.setPosition(3,w,h);
        }
 
        /**@override*/
        override public function readjustSize():void
        {
            super.readjustSize();
            setPositions();
        }
        /**@override*/
        override public function setTexCoords(vertexID:int, coords:Point):void
        {
            super.setTexCoords(vertexID,coords);
            setPositions();
        }
        /**@override*/
        override public function set width(value:Number):void
        {
            super.width = value;
            setTimeout(setPositions,1);
        }
        /**@override*/
        override public function set height(value:Number):void
        {
            super.height = value;
            setTimeout(setPositions,1);
        }
 
    }
}
复制代码
// 使用
if(viewPort.width>stageWidth)
    TestImage.offset = 1;

 

分享到:
评论

相关推荐

    基于starling的游戏

    在这样的游戏中,玩家通常扮演主角,通过解决谜题、战胜敌人或者收集物品来推进游戏进程。利用Starling,开发者可以创建丰富的动画效果,如角色移动、攻击动作、粒子特效等,同时保持良好的性能表现。 三、Starling...

    框架starling

    4. **纹理 atlases**:Starling支持纹理 atlases,这是一种优化资源加载和管理的方法,可以将多个小图像打包到单个大纹理中,减少内存占用和加载时间。 5. **粒子系统**:内置的ParticleSystem类使得创建复杂的粒子...

    Starling Feathers:Starling专属UI框架

    7. **社区支持**:由于Starling和Feathers的广泛使用,它们拥有活跃的开发者社区,开发者可以在论坛、博客和GitHub上获取帮助,分享经验,共同解决问题。 在实际开发中,使用Feathers可以极大地提高开发效率,减少...

    air starling 图片旋转

    在开发Adobe AIR应用程序时,使用Starling框架进行2D图形渲染是常见的选择。Starling是一个高性能的游戏和图形库,它基于ActionScript 3,并且专为Adobe AIR平台设计。本篇文章将深入探讨如何在Starling中实现图片...

    adobe starling as3 flash 3d Starling演讲PPT以及附件

    资源包括 PDF文档 文档中对STARLING以及相关框架的介绍以及代码实例 内容包括AS3 项目源文件两个 包含PDF中提到的例子 以及运行效果SWF10个 在Stage3D出现之前,Flash3D引擎( Papervision3D, Away3D,…)都是软解 ...

    Starling开发的游戏

    在游戏开发领域,Starling框架是一个非常重要的工具,它为ActionScript 3(AS3)开发者提供了高效且跨平台的2D游戏开发解决方案。本篇文章将深入探讨Starling框架的核心特性、工作原理以及如何利用它来创建精彩的...

    Starling1.5.1

    Starling 是一个高性能的2D游戏开发框架,它基于Adobe Flash和ActionScript 3.0设计,由Gamua公司开发。Starling的目标是为开发者提供一个简单易用、高效的平台,用于创建高质量的2D游戏和图形密集型应用,尤其适用...

    starling中文版粒子

    starling中文版粒子下载

    starling 任意形状遮罩

    Starling 任意形状遮罩是一种在AS3(ActionScript 3)环境中,使用Starling框架实现的高级图形处理技术。Starling是一个针对Adobe Flash Player和Adobe AIR的2D游戏开发框架,它允许开发者利用硬件加速来提升游戏...

    flash stage3D扩展 starling api 文档

    flash stage3D starling

    Starling Graphics extension 绘图API 扩展

    Starling Graphics扩展是针对Starling框架的一个重要组件,它提供了丰富的绘图API,极大地增强了在移动设备上进行2D图形渲染的能力。Starling是一个高效、跨平台的ActionScript 3库,专门设计用于游戏开发,它利用...

    starling使用范例

    Starling是一个基于Adobe Flash Player和Adobe AIR的2D游戏开发框架,它利用硬件加速图形渲染,为开发者提供了高性能的游戏开发环境。本示例主要讲解如何使用Starling进行基本的编程实践,包括创建舞台、添加图像、...

    starling版消灭星星

    "Starling版消灭星星"是一款基于Adobe Starling框架开发的休闲游戏,其核心玩法是对经典游戏"消灭星星"进行了现代化的重构。Starling框架是一个高效、高性能的2D图形库,专为ActionScript 3和Flash Player以及...

    Starling1.8源码(包含粒子系统扩展包)

    粒子系统是游戏和视觉效果中常见的一种技术,用于模拟火、烟、光、爆炸等复杂效果。在Starling框架中,粒子系统扩展包是一个强大的工具,可以让开发者轻松创建和控制各种动态效果。这个扩展通常包含一系列预设的粒子...

    Starling开发的微信飞机大战源码

    《Starling技术构建的微信飞机大战游戏源码解析》 在移动游戏开发领域,使用高效且灵活的技术框架是至关重要的。微信飞机大战是一款广受欢迎的轻量级休闲游戏,其背后的技术实现则采用了Starling框架。Starling是...

    starling中文API

    总之,"Starling中文API"是开发者掌握Starling框架的关键资源,它详细解释了各种类、方法和属性,帮助开发者利用Starling高效地开发2D游戏和应用。通过深入学习和实践,开发者可以充分利用硬件加速的优势,创建出...

    Starling9宫格类库

    在游戏开发或UI设计中,9宫格缩放是一种常见的技术,它允许图片在保持角部不变形的情况下进行拉伸,从而在不同尺寸的屏幕上呈现出更加自然的视觉效果。 在Starling框架中,原生并不直接支持9宫格缩放,但通过自定义...

    starling.swc

    Starling是一个基于Adobe Flash Player和Adobe AIR的2D游戏开发框架,由Daniel Sperl创建,其设计目的是为了提供高效、高性能的2D图形渲染能力,同时保持ActionScript 3.0的简单性和易用性。在Flash开发环境中,...

    PrimaryFeather-Starling-Framework-v1.3-175-g09eebe4.zip

    《Starling框架详解:构建高效2D应用的舞台》 Starling Framework,作为一个高效、轻量级的游戏开发框架,专为Adobe的Stage3D技术设计,致力于为2D游戏和应用提供高性能的渲染能力。标题中的"PrimaryFeather-...

    Starling-Filters, 用于 Starling AS3框架的过滤器集合.zip

    Starling-Filters, 用于 Starling AS3框架的过滤器集合 starling滤波器用于与 AS3框架一起使用的过滤器集合。master 分支包含用于 Starling 2.0的过滤器。对于 Starling 1.x,使用 archive 分支中的筛选器。演示应用...

Global site tag (gtag.js) - Google Analytics