目前我正在尝试同时进行两次拍卖实例,但是当我创建一个新对象时,它与之前的对象完全相同.
以下是创建新对象的代码:
AuctionSell._state = new auctionGen();
AuctionSell._state.init(i);
auctions.push(AuctionSell._state);
Run Code Online (Sandbox Code Playgroud)
需要注意的auctionGen()是,该函数返回一个包含拍卖本身周围所有变量和逻辑的对象.
function auctionGen()
{
return {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
^这只是一个空白模板,用于显示实际创建对象的方式.
更新拍卖数组:
update : function(dt)
{
if(auctions.length > 0)
{
for(var i = 0; i < auctions.length; ++i)
{
if(!auctions[i]._expired)
{
auctions[i].update(dt);
}
else
{
auctions.splice(i, 1);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我创建了新对象,然后将其推入一个包含我的拍卖的数组中.这发生在拍卖的init功能中,该功能仅在创建新拍卖时被调用.我已经检查了两个拍卖状态的数据,它们包含了拍卖的不同车辆,但看起来好像创建新的一个停止旧的.
如果我单独进行一次拍卖 - 取决于汽车 - 最终出价将始终高于其实际价值.但是,如果我同时进行这些拍卖,则保证价值不足.
我刚刚同时进行了两次拍卖,第一辆车的价格是,$18000但拍卖结束了$6370.第二辆车被评估为$57,000,拍卖结束于$46428.
所有出价均由AI完成,并且它们被编程为始终在高于车辆价值的某一点停止出价.只有在一次运行两个或更多拍卖时才会出现此问题.
还有另一种方法,我应该创建这些对象,使它们成为真正的新对象吗?截至目前,他们似乎互相干扰.
将更新调用更改为以下内容后:
update : function(dt)
{
var i;
if(auctions.length > 0)
{
i = 0;
while(i < auctions.length)
{
if(!auctions[i]._expired)
{
auctions[i].update(dt);
++i;
}
else
{
auctions.splice(i, 1);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且我的ai阵列不再是全球性的,似乎问题现在只发生在第二次车辆拍卖上.对招标$57,000车辆停在$17,198我这里$12,000车辆停在$23,947(预期的行为)
你有一个错误在你的update代码:如果删除的条目(你的splice电话),您不想增加i,它使你跳过条目-假设你有项目0,1以及2; 处理时1,将其删除; 现在,以前的条目2是1,所以如果你增加i,你将跳过它.
相反,只有i在您不删除条目时才会增加:
update : function(dt)
{
var i;
if(auctions.length > 0) // *** There's no reason to do this
{
i = 0; // *** Change on this line
while (i < auctions.length) // *** Change on this line
{
if(!auctions[i]._expired)
{
auctions[i].update(dt);
++i; // *** Note we increment `i`
}
else
{
auctions.splice(i, 1); // *** Removing, so don't increment `i`
}
}
}
}
Run Code Online (Sandbox Code Playgroud)