ページ 11

bitmapでアプリが強制終了してしまう

Posted: 2023年10月24日(火) 15:28
by ppp

コード: 全て選択

    var _Spriteset_Base_createUpperLayer = Spriteset_Base.prototype.createUpperLayer;
    Spriteset_Base.prototype.createUpperLayer = function() {
        _Spriteset_Base_createUpperLayer.apply(this, arguments);
        if (this instanceof Spriteset_Map) {
            this.createDrawSprite();
        }
    };

    Spriteset_Map.prototype.createDrawSprite = function() {
        for(var x = 0; x < $dataMap.width; x++){
            for(var y = 0; y < $dataMap.height; y++){
            var sprite = new Sprite();
            var color = 'rgba(255, 255, 255, 0.5)';
            sprite.bitmap = this.makeDrawBitmap(x, y, color);
            this.addChild(sprite);
            }
        }
    };

    Spriteset_Map.prototype.makeDrawBitmap = function(x, y, color) {
        var bitmap = new Bitmap(Graphics.boxWidth / 2, Graphics.boxHeight / 2);
        switch(true){
            case $gameMap.isPassable(x, y, 2):
            case $gameMap.isPassable(x, y, 4):
            case $gameMap.isPassable(x, y, 6):
            case $gameMap.isPassable(x, y, 8):
            bitmap.fillRect(x * 5, y * 5, 5, 5, color);
            return bitmap;
        }
    };
というコードを書いてみたのですが、メニューを開いたり、場所移動をしたときにアプリが強制終了してしまいます。どうすれば直りますでしょうか?

Re: bitmapでアプリが強制終了してしまう

Posted: 2023年10月24日(火) 16:05
by 剣崎 宗二
Sprite多すぎでメモリを使い切った物と推測します。
(一例として、40x40のマップだと1600個のSpriteになり、大分ヤバくなります)
試しにループの最大値($dataMap.width/$dataMap.heightの部分)を5くらいの固定値にしてみてまだ落ちるか見てみてください。

…下のスレでPlasma Darkさんも仰ってますが、
1マス1Spriteで作るより、1Sprite内のBitmapで全マス分の描画を行ってしまうほうが考えることは少なくなりそうです。
こちらの方法をお勧めいたします。

Re: bitmapでアプリが強制終了してしまう

Posted: 2023年10月24日(火) 16:10
by ppp
回答ありがとうございます。知識がないもので、1個のスプライトにするにはどうすればよいのでしょうか?

Re: bitmapでアプリが強制終了してしまう

Posted: 2023年10月24日(火) 16:26
by 剣崎 宗二
先ず、
剣崎 宗二 さんが書きました: 試しにループの最大値($dataMap.width/$dataMap.heightの部分)を5くらいの固定値にしてみてまだ落ちるか見てみてください。
こちらを試した結果はどうなりましたでしょうか?
これでも落ちるようであれば完全に違う問題になりますので以降の話全て無意味になってしまいます。


ppp さんが書きました:回答ありがとうございます。知識がないもので、1個のスプライトにするにはどうすればよいのでしょうか?
実コードは今書けないので大まかに行うべき事のみ提示させていただきますと、

1. Spriteをループの外に出す。
1個の矩形に戻します。そもそもこの矩形の中に色々書くのが目的ですので。

2. 毎回新規bitmapを作り直さないようにする。
これをやってしまうと前にそのbitmapに書き込んだものが消えます。
なので、 var bitmap = new Bitmap(... の部分もループの外(前)に出す必要があります。

とりあえずここら辺をやってみてください。

Re: bitmapでアプリが強制終了してしまう

Posted: 2023年10月24日(火) 16:34
by ppp
いろいろ試したところ、とりあえず5個に減らした場合は落ちなかったので、上の方法も試してみます!

Re: bitmapでアプリが強制終了してしまう

Posted: 2023年10月24日(火) 17:01
by ppp
おかげさまで解決しました!ありがとうございました!