Actionscript 3 对象池未正确返回对象
Iv使用对象池设置程序生成的游戏。第一个区域始终加载良好,有时下一个区域或第二个区域也会加载良好。然后它会崩溃,我编码要抛出的错误被抛出,告诉我池中没有足够的对象,这很奇怪,因为它应该在尝试加载下一个区域之前返回它使用的所有对象 一个链接到游戏,看看它在做什么 我甚至在我的sprite pool类中添加了一个countSprites函数来返回计数器所在的位置,然后让generateTile函数等待直到池返回到192,但它似乎仍然不起作用:/ 在做了一系列跟踪和if测试后,iv得出结论,它返回的对象很好,问题是它实际上绘制了从地图开始到现在的im区域的所有内容 这是在屏幕上生成我的平铺的功能Actionscript 3 对象池未正确返回对象,actionscript-3,flash,Actionscript 3,Flash,Iv使用对象池设置程序生成的游戏。第一个区域始终加载良好,有时下一个区域或第二个区域也会加载良好。然后它会崩溃,我编码要抛出的错误被抛出,告诉我池中没有足够的对象,这很奇怪,因为它应该在尝试加载下一个区域之前返回它使用的所有对象 一个链接到游戏,看看它在做什么 我甚至在我的sprite pool类中添加了一个countSprites函数来返回计数器所在的位置,然后让generateTile函数等待直到池返回到192,但它似乎仍然不起作用:/ 在做了一系列跟踪和if测试后,iv得出结论,它返回的
public function generateTile()
{
for (var i:int = X/GlobalCode.MAP_SCALE; i < (X + (800/TILE_SIZE)/GlobalCode.MAP_SCALE); i++)
{
for (var j:int = Y/GlobalCode.MAP_SCALE; j < Y + (600/TILE_SIZE)/GlobalCode.MAP_SCALE; j++)
{
hm = heightmap[i][j];
if (hm >= 0.84)
{
tile = waterPool.getSprite(); //this is where the tiles are taken from the sprite pool
}
else if (hm >= 0.8 && hm < 0.84)
{
tile = shallowPool.getSprite();//this is where the tiles are taken from the sprite pool
}
else if (hm >= 0.7 && hm < 0.8)
{
tile = sandPool.getSprite();//this is where the tiles are taken from the sprite pool
}
else if (hm >= 0.2 && hm < 0.7)
{
tile = tilePool.getSprite();
}
else
{
tile = stonePool.getSprite();//this is where the tiles are taken from the sprite pool
}
tile.width = TILE_SIZE;
tile.height = TILE_SIZE;
worldTiles.x = 0;
worldTiles.y = 0;
tile.x = TILE_SIZE * (i % 800);
tile.y = TILE_SIZE * (j % 600);
tilesInWorld.push(tile);
worldTiles.addChild(tile);
}
}
}
这是首先创建对象池的地方
tilePool = new SpritePool(Tile, 192);
sandPool = new SpritePool(Sand, 192);
shallowPool = new SpritePool(Shallow, 192);
waterPool = new SpritePool(Water, 192);
stonePool = new SpritePool(Stone, 192);
我不认为这有什么意义,但以防这是我的SpritePool类
package {
import flash.display.MovieClip;
public class SpritePool {
private var pool:Array;
private var counter:int;
public function SpritePool(type:Class, len:int) {
pool = new Array();
counter = len;
var i:int = len;
while(--i > -1){
pool[i] = new type();
}
}
public function getSprite():MovieClip
{
if(counter > 0){
return pool[--counter];
}
else{
throw new Error("You exhausted the pool!");
}
}
public function returnSprite(s:MovieClip):void
{
pool[counter++] = s;
}
public function countSprites():int
{
return counter;
}
}
}
改变
到
如果您没有提供完整的代码,那么很难得到错误。现在还不清楚delete调用的位置以及映射是如何生成的——您已经提供了函数,但它不是从何处执行的。你不能简单地问出问题所在——问题在于你和你的代码设计。我们无法读取您的所有代码并找到错误-这取决于您。在添加和删除内容时进行一些跟踪。始终检查剩余精灵的数量。如果它用完了,你就不会返回它们。看,我真的一点都不懂:对于var I:int=X/GlobalCode.MAP\u SCALE;i
package {
import flash.display.MovieClip;
public class SpritePool {
private var pool:Array;
private var counter:int;
public function SpritePool(type:Class, len:int) {
pool = new Array();
counter = len;
var i:int = len;
while(--i > -1){
pool[i] = new type();
}
}
public function getSprite():MovieClip
{
if(counter > 0){
return pool[--counter];
}
else{
throw new Error("You exhausted the pool!");
}
}
public function returnSprite(s:MovieClip):void
{
pool[counter++] = s;
}
public function countSprites():int
{
return counter;
}
}
}
for (var i:int = X/GlobalCode.MAP_SCALE; i < (X + (800/TILE_SIZE)/GlobalCode.MAP_SCALE); i++)
{
for (var j:int = Y/GlobalCode.MAP_SCALE; j < Y + (600/TILE_SIZE)/GlobalCode.MAP_SCALE; j++)
{
var Xcalc = (X + (800/TILE_SIZE)/GlobalCode.MAP_SCALE);
var Ycalc = (Y + (600/TILE_SIZE)/GlobalCode.MAP_SCALE);
for (var i:int = X; i < Xcalc; i++)
{
for (var j:int = Y; j < Ycalc; j++)
{