图像RotateFlip仅在直接调用时有效

用户名

我有一个这样的精灵类:

public class Sprite : System.ICloneable
{
    public Image SpriteImage { get; private set; }
    public Image SpriteMask { get; private set; }

    public Sprite(Image img, Image maskImg = null)
    {
        this.SetImage(img, maskImg);
    }

    public void SetImage(Image img, Image maskImg = null)
    {
        this.SpriteImage = new Bitmap(img,img.Width,img.Height);

        if (maskImg != null)
        {
            this.SpriteMask = new Bitmap(maskImg, maskImg.Width, maskImg.Height);
        }
        else
        {
            this.SpriteMask = this.SpriteImage;
        }
    }

    public virtual object Clone()
    {
        return new Sprite(this.SpriteImage,this.SpriteMask);
    }

    public void FlipHorizontally()
    {
        this.SpriteImage.RotateFlip(RotateFlipType.RotateNoneFlipX);
        this.SpriteMask.RotateFlip(RotateFlipType.RotateNoneFlipX);
    }

    public void FlipVertically()
    {
        this.SpriteImage.RotateFlip(RotateFlipType.RotateNoneFlipY);
        this.SpriteMask.RotateFlip(RotateFlipType.RotateNoneFlipY);
    }
}

因为我有SpriteMask和SpriteImage,所以我创建了一个函数来旋转它们两个而没有麻烦。在另一堂课中,我有:

public void ChangeDirection(bool facingRight)
{
    if (facingRight != this.FacingRight)
    {

        for(int i = 0; i < this.Sprites.Count; i++)
        {
            this.Sprites[i].FlipHorizontally();
        }

        foreach (Weapon weapon in this.CollectedWeapons)
        {
            weapon.ChangeDirection(facingRight);
        }
        this.FacingRight = facingRight;
    }
}

this.Sprites是List<Sprite> Sprites;现在,当运行此代码时,精灵不会翻转,但是如果我更改sprite.FlipHorizontallythis.Sprites[i].SpriteImage.RotateFlip(RotateFlipType.RotateNoneFlipX);则可以正常工作。为什么是这样?

J ...

Sprite构造函数中,您可以将sprite mask参数设置为null。如果为null,请查看您的操作:

if (maskImg != null)
{
    this.SpriteMask = new Bitmap(maskImg, maskImg.Width, maskImg.Height);
}
else
{
    this.SpriteMask = this.SpriteImage;
}

您设置SpriteMaskSpriteImage-因为图像是参考类型,所以您仅分配参考。仍然只有一个Image对象,但是两个变量都指向该对象。您打电话的时候 :

public void FlipHorizontally()
{
    this.SpriteImage.RotateFlip(RotateFlipType.RotateNoneFlipX);
    this.SpriteMask.RotateFlip(RotateFlipType.RotateNoneFlipX);
}

...由于SpriteImageSpriteMask是相同的对象,因此您要翻转图像,然后再将其翻转回来。如果未提供遮罩,您可能会考虑制作一个遮罩的精灵图像副本:

if (maskImg != null)
{
    this.SpriteMask = new Bitmap(maskImg, maskImg.Width, maskImg.Height);
}
else
{
    this.SpriteMask = new Bitmap(this.SpriteImage);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

图像RotateFlip仅在直接调用时有效

来自分类Dev

使用openCV从网络摄像头捕获图像的功能仅在首次调用时有效

来自分类Dev

JavaScript在使用Node调用时有效,但仅在从HTML调用时才有效

来自分类Dev

播放模板仅在带括号调用时有效

来自分类Dev

PHP函数中的javaScript代码仅在首次调用时有效

来自分类Dev

QLocale setDefault 仅在第二次调用时有效

来自分类Dev

jQuery Ajax调用仅在首页加载时有效

来自分类Dev

Sails.js / Waterline .add()和.remove()仅在第二次调用时有效

来自分类Dev

使用jquery序列化上传多个文件仅在第二次调用时有效

来自分类Dev

拖放:仅在刷新时有效

来自分类Dev

提取仅在刷新时有效

来自分类Dev

仅在调试javascript时有效

来自分类Dev

angularJS表单验证仅在首次使用时有效

来自分类Dev

Javascript:JSON请求仅在第一次使用时有效

来自分类Dev

jQuery验证-errorPlacement仅在第一次使用时有效

来自分类Dev

Javascript:JSON请求仅在第一次使用时有效

来自分类Dev

按钮仅在一个接一个使用时有效

来自分类Dev

异步函数在一次但不是多次调用时有效

来自分类Dev

$.ajax 在立即调用时有效,但在单击时作为回调调用时无效

来自分类Dev

使用Ajax调用追加div仅在首次加载时有效

来自分类Dev

从视图观察控制器属性仅在从didInsertElement调用get('controller')时有效

来自分类Dev

Spring @Transactional仅在调用方也是@Transactional时有效

来自分类Dev

Spring @Transactional仅在调用方也是@Transactional时有效

来自分类Dev

在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

来自分类Dev

在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

来自分类Dev

我的剑道级联下拉列表失败了。仅在第一次使用时有效

来自分类Dev

Intent Intents.Insert.ACTION仅在第一次使用时有效?

来自分类Dev

WKNavigationDelegate仅在设置为self时有效

来自分类Dev

AngularJS代码仅在ng-app =“”时有效

Related 相关文章

  1. 1

    图像RotateFlip仅在直接调用时有效

  2. 2

    使用openCV从网络摄像头捕获图像的功能仅在首次调用时有效

  3. 3

    JavaScript在使用Node调用时有效,但仅在从HTML调用时才有效

  4. 4

    播放模板仅在带括号调用时有效

  5. 5

    PHP函数中的javaScript代码仅在首次调用时有效

  6. 6

    QLocale setDefault 仅在第二次调用时有效

  7. 7

    jQuery Ajax调用仅在首页加载时有效

  8. 8

    Sails.js / Waterline .add()和.remove()仅在第二次调用时有效

  9. 9

    使用jquery序列化上传多个文件仅在第二次调用时有效

  10. 10

    拖放:仅在刷新时有效

  11. 11

    提取仅在刷新时有效

  12. 12

    仅在调试javascript时有效

  13. 13

    angularJS表单验证仅在首次使用时有效

  14. 14

    Javascript:JSON请求仅在第一次使用时有效

  15. 15

    jQuery验证-errorPlacement仅在第一次使用时有效

  16. 16

    Javascript:JSON请求仅在第一次使用时有效

  17. 17

    按钮仅在一个接一个使用时有效

  18. 18

    异步函数在一次但不是多次调用时有效

  19. 19

    $.ajax 在立即调用时有效,但在单击时作为回调调用时无效

  20. 20

    使用Ajax调用追加div仅在首次加载时有效

  21. 21

    从视图观察控制器属性仅在从didInsertElement调用get('controller')时有效

  22. 22

    Spring @Transactional仅在调用方也是@Transactional时有效

  23. 23

    Spring @Transactional仅在调用方也是@Transactional时有效

  24. 24

    在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

  25. 25

    在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

  26. 26

    我的剑道级联下拉列表失败了。仅在第一次使用时有效

  27. 27

    Intent Intents.Insert.ACTION仅在第一次使用时有效?

  28. 28

    WKNavigationDelegate仅在设置为self时有效

  29. 29

    AngularJS代码仅在ng-app =“”时有效

热门标签

归档