在我的2D XNA游戏中绘制精灵的有效方法是什么?更具体地说,我把这个问题分成4个问题.
我过去常常声明Game1的spriteBatch 静态,SpriteBatch.Begin并.Close在每个中调用IDrawable.Draw.这不太好用.给每个drawable它自己的SpriteBatch也不能很好地工作.
Q1:我认为最好有一个 SpriteBatch实例,只调用一次开始/关闭.它是否正确?
目前,我Game1.Draw看起来像这样:
spriteBatch.Begin();
base.Draw(gameTime); // draws elements of Game.Components
// ...
spriteBatch.End();
Run Code Online (Sandbox Code Playgroud)
Q2:这样,Begin只调用一次.这是要走的路吗?你们是怎么解决这个问题的?
问题3:此外,每个组件都有自己的IGameComponent.LoadContent方法.我应该在那里加载我的内容吗?或者在父类中加载内容是否更好Game1.LoadContent?
我意识到我永远不应该加载相同的内容两次,所以我给了我的drawable组件静态和非静态组件Texture2D,并给了他们2个构造函数:
static Texture2D defaultTexture;
public Texture2D MyTexture;
public Enemy()
: this(defaultTexture) { }
public Enemy(Texture2D texture)
{
MyTexture = texture;
}
protected override void LoadContent()
{
if (MyTexture == null)
{
if (defaultTexture == null)
{
defaultTexture = …Run Code Online (Sandbox Code Playgroud) 我们都知道CSS精灵图像非常适合减少请求量等等,但是浏览器的性能如何使用大图像作为背景渲染具有多个元素的页面?
我想知道NES如何显示其图形肌肉.我已经在线研究过这些东西,并通过它阅读,但我想知道最后一件事:Nametables.
基本上,根据我的阅读,NES名称表中的每个8x8块指向模式表中的一个位置,该位置保存图形内存.此外,名称表还有一个属性表,为每个16x16块设置特定的调色板.他们像这样联系在一起:
(假设16个8x8块)Nametable,ABCD =指向精灵数据的指针:
ABBB
CDCC
DDDD
DDDD
Run Code Online (Sandbox Code Playgroud)
属性表,1 2 3 =指向调色板数据的指针,<左侧引用值,上方^,左侧和上方:
1<2<
^'^'
3<3<
^'^'
Run Code Online (Sandbox Code Playgroud)
因此,在上面的示例中,块将被着色
1A 1B 2B 2B
1C 1D 2C 2C
3D 3D 3D 3D
3D 3D 3D 3D
Run Code Online (Sandbox Code Playgroud)
现在,如果我在固定的屏幕上有这个 - 它很棒!因为NES分辨率是256x240像素.现在,这些表如何调整滚动?
因为Nametable 0可以滚动到Nametable 1,如果你继续滚动Nametable 0将再次回滚.我得到了.但我没有得到的是如何滚动属性表包装.从我在网上看到的情况来看,它分配属性的16x16块会导致屏幕边缘区域的颜色失真(如左右滚动时反映,SMB3反之亦然).
我关心的是我了解如何滚动名称表,但是如何滚动属性表?对于intsance,如果我在屏幕的左侧有一个绿色块,将屏幕向右移动理论上应该使右侧的瓷砖变为绿色,直到它们移动到框架中,然后它们将恢复到他们的正常颜色.
~~~~编辑:我想指出我知道扫描线,X和Y.这个想法刚刚贯穿我的脑海.
假设我的扫描线Y为10.这意味着我正在水平地读取10个值到我的名字表中.这意味着我的第一列不在屏幕上,因为它只有8的像素宽度.但是,颜色属性保持不变,因为它的宽度为16.
假设整个列的颜色属性为绿色,我认为对用户来说是正确的,屏幕左边的前6个像素是绿色,屏幕最右边的10个也应该是绿色的?那么,根据屏幕,左边的假设我是否正确?
我有这个错误 The Image Optimization Framework was not initialized. Verify the sprites directory exists. After creating the directory, restart the site or application.
错误是在这个方法,Microsoft.Web.Samples.ImageOptimizations.EnsureInitialized()但我有一个App_Sprites目录,我已经重启了几次,casini和IIS.我从版本0.3更新到0.4.
关于如何解决这个问题的任何想法?
我正在使用AspNetSprites-MvcAndRazorHelpers
嗨,我正在与精灵一起工作,并获得了一些火狐和Chrome的有趣行为.当我的精灵有655或更少的图像时,我的精灵工作正常.但是当它更进一步(656或更多)时它不会显示(只是变得不可见).我猜这个问题不在我的代码中,因为它在Opera和IE中运行良好.怎么会?
我正在使用PHP来动态生成精灵.生成的html如下所示:
<span class="_sprite_images _sprite_images_1"></span>
<span class="_sprite_images _sprite_images_0"></span>
<span class="_sprite_images _sprite_images_2"></span>
<span class="_sprite_images _sprite_images_3"></span>
<span class="_sprite_images _sprite_images_4"></span>
<span class="_sprite_images _sprite_images_5"></span>
[...]
Run Code Online (Sandbox Code Playgroud)
CSS看起来像这样:
._sprite_images{background:url("../sprite_images/sprite.jpg");display:inline-block;}
._sprite_images_0{width:50px;height:50px;background-position:0 0px;}
._sprite_images_1{width:50px;height:50px;background-position:0 -50px;}
._sprite_images_2{width:50px;height:50px;background-position:0 -100px;}
[...]
Run Code Online (Sandbox Code Playgroud)
我的精灵的每个图像的大小为50x50(px),大约为2到6 KB.我用jpg,png和gif类型测试了它们.都得到了相同的结果.
655张图片

656张图片

我在Unity中有一组Sprite对象.它们的大小取决于加载的图像.我想将它们像平铺地图并排组合成一个图像.我希望它们的布局就像你正在形成一排图像,一个接一个.(注意:没有一个在另一个之上)我怎么能这样做?
我正在组合的原因(仅适用于那些想知道的人)是因为我正在使用polygon2D Collider.由于当我并排使用多个碰撞器时发生了一些奇怪的行为,我决定在添加一个大的多边形碰撞器之前组合图像.请注意,这些事情发生在运行时.我不能只创建一个大图像并加载,因为图像的顺序只在运行时确定.
我希望能得到一些帮助.谢谢.
我有一个关于2D Sprite动画的快速问题,我无法在任何地方找到具体答案:
我有一个带有步行动画的精灵到右边.但是,当他向左走(2D侧卷轴)时,我显然想将动画向左翻转.
我可以轻松地翻转精灵本身transform.localscale.x,然而,使用只翻转精灵.不是动画片段.(这不再发生在Unity中)
因此,当精灵翻转时,动画片段开始播放的那一刻,它会向右翻转(因为我唯一的动画片段是面向右侧的精灵).
这是在Photoshop中翻转精灵的唯一方法,还是有办法在Unity中执行此操作?
谢谢!
更新:如果通过乘以它来缩放变换,则使用单位的实际版本-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 : …Run Code Online (Sandbox Code Playgroud) 检查下面三个图中的问题.我想扩展已经在Mozilla FireFox和Google Chrome中完美运行的功能,以便在Microsoft Edge中完美运行.
我想在Microsoft Edge中使用精确像素化,非反锯齿,代表我的精灵图像放大,但无论我尝试过什么,到目前为止在单一浏览器中失败了.我想要一种优雅的CSS方式来扩展Microsoft Edge中的当前代码,它可以像在其他两个主要浏览器中那样工作.我还没尝试过什么?提前致谢!
HTML:
<box><icon style="background-position:0px -3081px"></icon></box>
Run Code Online (Sandbox Code Playgroud)
CSS:
box {
float: left;
text-align: center;
width: 40px;
}
icon {
background:url(../layout/icons.png) no-repeat;
background-color: white;
margin: auto;
margin-top: -10px;
width:13px;
height:13px;
display: block;
-ms-transform: scale(3);
-o-transform: scale(3);
-webkit-transform: scale(3);
transform: scale(3);
-ms-interpolation-mode: nearest-neighbor; /* IE8+ */
image-rendering: -moz-crisp-edges; /* Firefox */
image-rendering: -o-crisp-edges; /* Opera */
image-rendering: -webkit-optimize-contrast; /* Chrome (and eventually Safari) */
image-rendering: pixelated; /* Chrome */
image-rendering: optimizeSpeed; /* …Run Code Online (Sandbox Code Playgroud) 例如,在iOS工具栏中,您可以拖动自己的.png,它是不透明的黑色和透明,并自动添加iOS蓝色光泽.
但是,我想知道如何自己做,但只有纯色才能做到.
例如,如果你有这个图像:

你会做什么来制作整个实心,粉红色,蓝色或灰色?我想通过使用代码着色来减少我在应用程序中保存的.png版本的数量.
谢谢!