我环顾四周,没有提出任何可能是为什么我正在研究的东西行不通的原因。我已经进行了类似的实验,但我想最好还是顺其自然,为您提供我要完成的工作的布局。
//Main game loop
function(){
for(let i... iteration of gameObjects){
// go through object list and add at random to transfer lists like
jsEngine.transferList.push(jsEngine.objects[i])
}
// then place the array in the db (jsEngine is a class, jsEngine.transferBool
//is a simple prop of jsEngine and so is the transferTimer)
let request = indexedDB.open(this.dbName,this.dbVersion);
request.onsuccess = function(event){
let db = event.target.result;
//Failed attempt at controlling when saved
if(jsEngine.transferBool === false&& jsEngine.transferTimer >= 48) {
jsEngine.transferBool = true;
jsEngine.transferTimer = 0;
}
IDBSendAndGrab(jsEngine, db).then(
jsEngine.transferBool = false
);
}
发送和获取功能
function IDBSendAndGrab(engine,db){
return new Promise (()=>{
let completed = 0;
//main store
let thisStore =db.transaction(engine.mainTransferStore.name,"readwrite")
.objectStore(engine.mainTransferStore.name);
// check main store for objects , if there are any
// procede to run a getall promise and when thats done
// run a clearStore promise and when that is done
//resolve IDBCheckStoreForConcat promise.
IDBCheckStoreForConcat(engine,thisStore).then(()=>{
for(let i =1; i<= engine.otherStores;i++){
// goes through a list of other object stores generated ,
//(I chose 4 stores)
// (before all of this the onupgrade creates these stores and the engine just
//gets the amount of stores to use as the "engine.otherStores").
// Next it uses the itorator and strings it
//to access the stores (which are also stringed numbers)
//and transfer the objects (if there are any to the store in question)
IDBTransferObjects(engine,i,db).then(()=>{
completed++;
if(completed === engine.otherStores.length){
// the resolve once all the stores have had objects sent to.
resolve()
}
})
}
})
});
}
发生的事件列表是:
1。在引擎初始化之前创建商店
2.construct jsEngine类并将所有变量附加为props(例如transferBool),
3.run游戏循环,
4。在主游戏循环中使用for循环将对象添加到变化的传输列表中,
5。然后在主游戏循环中的for循环之后打开db,
6。检查主存储中是否有对象(如果随机插入,[主存储为“ 0”])并连接到我的obj池列表以再次插入,
7。将所有需要的objs添加到在转移清单中分配给它们的商店(通过在清单中的放置: array [1:[obj1:{Hell:“ o”}]],2:[没什么,所以不要加我] ...),
8。然后,当所有这些都解决后,继续游戏循环。
现在,它经过几个循环并阻塞ui后才使游戏处于空闲状态,仅当iI使用我的鼠标事件在屏幕坐标上进行挖掘时,它才解锁一个帧。我在“效果”标签中查看了它,感觉很奇怪,好像有90%的空闲状态。一切正常,但是我的用户界面被阻止了,我也不知道为什么。
免责声明:我不是要您重现此程序,也不是有人问我为什么要像这样构建它,“因为它可以通过另一种简单的方法来完成”,所以您必须知道所有这些我正在建造,这是唯一的方法。
但是我在问为什么上述逻辑不起作用的原因 以及如何解决。通过事件循环,通过堆栈和事件查询... input的类型。
答案 0 :(得分:0)
我找到了答案,这仅仅是因为我在每一个滴答声中都在gameObjects上调用了getkeys,因此它导致了ofc的滞后,我将删除此帖子,并为您的时间浪费而感到抱歉。