热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

是什么导致此卡更改尺寸?[视频和代码]

如何解决《是什么导致此卡更改尺寸?[视频和代码]》经验,为你挑选了1个好方法。

我正在编写Starling的棋盘游戏(动作脚本3).我使用的Starling版本有一个名为Sprite3D的类,它允许我方便,轻松地编码在这个游戏中使用的卡片的翻转.我很困扰的事实是我的卡片在翻转时会改变尺寸,而我无法找到更改的来源.

所有帮助表示赞赏.

可以在此YouTube视频上查看此问题.

在github页面上可以在github上完整地看到代码.

我将继续更详细地介绍......视频中包含以下所有信息.

Card类不包含可视信息.它是一个控制器类.它确实拥有两个精灵.一个精灵填充正面,另一个精灵填充背面.Card类还应用了蒙版和尺寸属性,以使面具有相同的大小和形状.

Card类还包含动画代码.设置卡片动画的代码与在starling博客上发现的视频中使用的代码非常相似,该视频显示了如何在2D内存游戏中快速,轻松地实现Stage3D.Card类通过使用补间动画旋转,以将卡的rotationY属性从0 更改为PI,并在触摸事件上将PI从PI更改为0.在翻转过程中发生错误,因此我将在此处包含翻转代码:

public function flip() : void {
    _state = !(this._state);
    if( this.animations ){
        var tween : starling.animation.Tween = new Tween( this, 2, starling.animation.Transitions.EASE_OUT_BOUNCE );
        var card : Card = this;
        var didFlip : Boolean = false;
        tween.animate("rotationY", this._state == Card.FACE_UP ? Math.PI : 0 );
        tween.OnUpdate= updateVisibility;
        Starling.juggler.add( tween );
    }
}
private function updateVisibility():void
{
    var sHelper:Vector3D = new Vector3D();
    var card : Card = this;
    stage.getCameraPosition( card, sHelper );
    if( sHelper ){
        this._front_face.visible = sHelper.z <0;
        this._back_face.visible = sHelper.z >= 0;
    }
}

FrontFace和BackFace类都来自CardFace类.CardFace类将卡片作为参考,并设置一个等于卡片面具大小和形状的面具.这可能是多余的,因为卡的掩码应该掩盖所有子DisplayObject,但我们仍然这样做.

BackFace有文字,徽标,纹理和颜色.

FrontFace什么都不做.它具有特定行为的子类,并将数据对象转换为显示布局.

在这种情况下,我们使用ProfileFrontFace为FrontFace创建子类.ProfileFrontFace将卡对象和配置文件数据对象作为构造函数参数.卡对象通过super()调用传递给CardFace,并保存配置文件对象供以后使用.

将ProfileFrontFace添加到舞台后,该类将从配置文件数据对象中提取标题,收入和费用.它为每个项目创建文本字段.它还会计算现金流量并为此值创建文本字段.使用PNG纹理创建背景,PNG纹理是一个简单的白色正方形,在卡片的整个面上伸展.在这个白色方块上,我们应用了颜色纹理.创建后,不会更改背景图像.代码如下:

//we remove the event listener so this function code is only executed once
this.removeEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
var width : int = this.cardWidth; /* 400 */
var height : int = this.cardHeight; /* 300 */
var bg : Image = new Image( Game.assets.getTexture("blank") );
/* start the background in the top left */
bg.x = 0;
bg.y = 0;
/* have the background fill the card dimension space */
bg.width = width;
bg.height = height;
/* apply a color so that the background is not pure white */
bg.color = ColorScheme.OPAL;
/* add the background to the stage */
this.addChild( bg );

在函数的其余部分,我们创建文本并显示它.为简单起见,我不在此处包含该代码.在测试中,我已经删除了该代码并且看到它对于在翻转到正面时改变卡的尺寸的特殊行为没有影响.

有谁见过Sprite3D上的掩码无法作为掩码执行的情况?

有没有人看到掩码无法在常规Sprite对象上执行的情况?

当使用Tween更改对象上的"rotationY"值时,Tween.animate()方法会导致奇怪的行为吗?

任何和所有答案都会有所帮助.谢谢!



1> Jared Clemen..:

固定!!!!!我找到了!

我发现问题不是正面.我已经在卡本身上应用了一个掩码,它是Sprite3D对象.那面具造成了问题.当我删除它时,BackFace(一个Sprite对象)扩展到与正面相同的大小,现在当我设置卡片尺寸时,两个面具有相同的大小.

我已将卡尺寸更新为400x250以匹配原始BackFace布局,现在一切都运行良好.

提示:尽可能在Sprite对象上设置遮罩,而不是Sprite3D对象.这使2D操作保持在2D对象上.


推荐阅读
author-avatar
千与千寻de秘密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有