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

返信する
ppp
記事: 48
登録日時: 2022年9月28日(水) 21:50

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

投稿記事 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;
        }
    };
というコードを書いてみたのですが、メニューを開いたり、場所移動をしたときにアプリが強制終了してしまいます。どうすれば直りますでしょうか?
アバター
剣崎 宗二
記事: 744
登録日時: 2016年11月12日(土) 20:36
連絡する:

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

投稿記事 by 剣崎 宗二 »

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

…下のスレでPlasma Darkさんも仰ってますが、
1マス1Spriteで作るより、1Sprite内のBitmapで全マス分の描画を行ってしまうほうが考えることは少なくなりそうです。
こちらの方法をお勧めいたします。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
ppp
記事: 48
登録日時: 2022年9月28日(水) 21:50

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

投稿記事 by ppp »

回答ありがとうございます。知識がないもので、1個のスプライトにするにはどうすればよいのでしょうか?
アバター
剣崎 宗二
記事: 744
登録日時: 2016年11月12日(土) 20:36
連絡する:

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

投稿記事 by 剣崎 宗二 »

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


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

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

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

とりあえずここら辺をやってみてください。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
ppp
記事: 48
登録日時: 2022年9月28日(水) 21:50

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

投稿記事 by ppp »

いろいろ試したところ、とりあえず5個に減らした場合は落ちなかったので、上の方法も試してみます!
ppp
記事: 48
登録日時: 2022年9月28日(水) 21:50

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

投稿記事 by ppp »

おかげさまで解決しました!ありがとうございました!
返信する

“MV:質問”に戻る