Forráskód Böngészése

where
___________________________________________
############################################################################################
ERROR in action number 1
of Draw Event for object oInGameManager:
Bulb:
Cannot call .DrawLitSurface() when the destination surface and drawn surface are the same
If you are drawing the application surface, use a Post-Draw event or GUI draw event

at gml_Script___BulbError (line 15) - show_error("Bulb:\n" + _string + "\n ", true);
############################################################################################
gml_Script___BulbError (line 15)
gml_Script_anon@9988@BulbRenderer@BulbRenderer (line 280) - __BulbError("Cannot call .DrawLitSurface() when the destination surface and drawn surface are the same\nIf you are drawing the application surface, use a Post-Draw event or GUI draw event");
gml_Object_oInGameManager_Draw_73 (line 9) - global.bulb_renderer.DrawLitSurface(application_surface, 0, 0, _surf_w, _surf_h);

tianhaobu 3 hónapja
szülő
commit
be74447462

+ 2 - 0
ddmyx.yyp

@@ -87,6 +87,7 @@
     {"id":{"name":"oInGameManager","path":"objects/oInGameManager/oInGameManager.yy",},},
     {"id":{"name":"oInGameManager","path":"objects/oInGameManager/oInGameManager.yy",},},
     {"id":{"name":"oInteractIndicator","path":"objects/oInteractIndicator/oInteractIndicator.yy",},},
     {"id":{"name":"oInteractIndicator","path":"objects/oInteractIndicator/oInteractIndicator.yy",},},
     {"id":{"name":"oInventory","path":"objects/oInventory/oInventory.yy",},},
     {"id":{"name":"oInventory","path":"objects/oInventory/oInventory.yy",},},
+    {"id":{"name":"oLight","path":"objects/oLight/oLight.yy",},},
     {"id":{"name":"oMain","path":"objects/oMain/oMain.yy",},},
     {"id":{"name":"oMain","path":"objects/oMain/oMain.yy",},},
     {"id":{"name":"oParentCollectable","path":"objects/oParentCollectable/oParentCollectable.yy",},},
     {"id":{"name":"oParentCollectable","path":"objects/oParentCollectable/oParentCollectable.yy",},},
     {"id":{"name":"oParentEnemy","path":"objects/oParentEnemy/oParentEnemy.yy",},},
     {"id":{"name":"oParentEnemy","path":"objects/oParentEnemy/oParentEnemy.yy",},},
@@ -221,6 +222,7 @@
     {"id":{"name":"sHitboxMark","path":"sprites/sHitboxMark/sHitboxMark.yy",},},
     {"id":{"name":"sHitboxMark","path":"sprites/sHitboxMark/sHitboxMark.yy",},},
     {"id":{"name":"sHitboxUp","path":"sprites/sHitboxUp/sHitboxUp.yy",},},
     {"id":{"name":"sHitboxUp","path":"sprites/sHitboxUp/sHitboxUp.yy",},},
     {"id":{"name":"sInteractIndicator","path":"sprites/sInteractIndicator/sInteractIndicator.yy",},},
     {"id":{"name":"sInteractIndicator","path":"sprites/sInteractIndicator/sInteractIndicator.yy",},},
+    {"id":{"name":"sLightCookie","path":"sprites/sLightCookie/sLightCookie.yy",},},
     {"id":{"name":"sPlayerArcSlash","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},},
     {"id":{"name":"sPlayerArcSlash","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},},
     {"id":{"name":"sPlayerAttack","path":"sprites/sPlayerAttack/sPlayerAttack.yy",},},
     {"id":{"name":"sPlayerAttack","path":"sprites/sPlayerAttack/sPlayerAttack.yy",},},
     {"id":{"name":"sPlayerDash","path":"sprites/sPlayerDash/sPlayerDash.yy",},},
     {"id":{"name":"sPlayerDash","path":"sprites/sPlayerDash/sPlayerDash.yy",},},

+ 15 - 1
objects/oInGameManager/Create_0.gml

@@ -16,4 +16,18 @@ global.playerINK = 0;
 // room transiting
 // room transiting
 global.door_direction = undefined;
 global.door_direction = undefined;
 global.target_door_id = -1;
 global.target_door_id = -1;
-global.target_room = noone;
+global.target_room = noone;
+
+// rendering
+// 1. 获取当前视口的摄像机(通常是 view 0)
+var _camera = view_camera[0];
+// 2. 初始化 Bulb 渲染器
+global.bulb_renderer = new BulbRenderer(_camera);
+// 3. 配置环境光 (根据截图中的变量列表)
+// .ambientColor: 设置环境光颜色 (c_black = 全黑, c_dkgray = 昏暗)
+global.bulb_renderer.ambientColor = c_dkgray;
+// 4. 配置阴影质量 (可选)
+// .smooth: 是否使用双线性过滤 (默认 true)
+global.bulb_renderer.smooth = true;
+// .soft: 是否使用软阴影 (默认 true)
+global.bulb_renderer.soft = true;

+ 9 - 0
objects/oInGameManager/Draw_73.gml

@@ -0,0 +1,9 @@
+
+// rendering
+// 获取应用表面的宽高
+var _surf_w = surface_get_width(application_surface);
+var _surf_h = surface_get_height(application_surface);
+
+// 将光照渲染到应用表面上
+// 参数解析:(targetSurface, x, y, width, height, [textureFiltering], [alphaBlend])
+global.bulb_renderer.DrawLitSurface(application_surface, 0, 0, _surf_w, _surf_h);

+ 5 - 1
objects/oInGameManager/Step_0.gml

@@ -8,4 +8,8 @@ if global.developer_mode
 		oPlayer.x = mouse_x;
 		oPlayer.x = mouse_x;
 		oPlayer.y = mouse_y;
 		oPlayer.y = mouse_y;
 	}	
 	}	
-}
+}
+
+// rendering
+// 每帧更新光照计算(处理动态光源和遮挡)
+global.bulb_renderer.Update();

+ 1 - 0
objects/oInGameManager/oInGameManager.yy

@@ -5,6 +5,7 @@
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":73,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
   ],
   ],
   "managed":true,
   "managed":true,
   "name":"oInGameManager",
   "name":"oInGameManager",

+ 6 - 0
objects/oLight/Create_0.gml

@@ -0,0 +1,6 @@
+my_light = new BulbLight(global.bulb_renderer, sLightCookie, 0, x, y);
+my_light.color = c_orange; // 注意检查属性名是否也是驼峰 (color vs blend)
+my_light.penumbraSize = 30; // 半影大小(软阴影)
+
+my_light.x = x;
+my_light.y = y;

+ 35 - 0
objects/oLight/oLight.yy

@@ -0,0 +1,35 @@
+{
+  "$GMObject":"",
+  "%Name":"oLight",
+  "eventList":[
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+  ],
+  "managed":true,
+  "name":"oLight",
+  "overriddenProperties":[],
+  "parent":{
+    "name":"ddmyx",
+    "path":"ddmyx.yyp",
+  },
+  "parentObjectId":null,
+  "persistent":false,
+  "physicsAngularDamping":0.1,
+  "physicsDensity":0.5,
+  "physicsFriction":0.2,
+  "physicsGroup":1,
+  "physicsKinematic":false,
+  "physicsLinearDamping":0.1,
+  "physicsObject":false,
+  "physicsRestitution":0.1,
+  "physicsSensor":false,
+  "physicsShape":1,
+  "physicsShapePoints":[],
+  "physicsStartAwake":true,
+  "properties":[],
+  "resourceType":"GMObject",
+  "resourceVersion":"2.0",
+  "solid":false,
+  "spriteId":null,
+  "spriteMaskId":null,
+  "visible":true,
+}

+ 1 - 1
objects/oMain/Create_0.gml

@@ -41,4 +41,4 @@ global.developer_mode = true;
 
 
 // save file
 // save file
 global.save_data = {};
 global.save_data = {};
-global.save_filename = "ddmyx_save.dat";
+global.save_filename = "ddmyx_save.dat";

+ 0 - 0
objects/oMain/Draw_73.gml


+ 1 - 1
objects/oMain/Step_0.gml

@@ -73,4 +73,4 @@ else if _close
 {
 {
 	with(global.inventory) instance_destroy();
 	with(global.inventory) instance_destroy();
 	autodel_handle("inventory");
 	autodel_handle("inventory");
-}
+}

+ 1 - 0
objects/oMain/oMain.yy

@@ -6,6 +6,7 @@
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":73,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
   ],
   ],
   "managed":true,
   "managed":true,
   "name":"oMain",
   "name":"oMain",

+ 5 - 0
objects/oParentSolid/Create_0.gml

@@ -0,0 +1,5 @@
+// 创建静态遮挡
+my_occluder = new BulbStaticOccluder(global.bulb_renderer);
+// 添加边缘
+my_occluder.AddEdge(bbox_left, bbox_top, bbox_right, bbox_top);
+my_occluder.AddEdge(bbox_right, bbox_top, bbox_right, bbox_bottom);

+ 3 - 1
objects/oParentSolid/oParentSolid.yy

@@ -1,7 +1,9 @@
 {
 {
   "$GMObject":"",
   "$GMObject":"",
   "%Name":"oParentSolid",
   "%Name":"oParentSolid",
-  "eventList":[],
+  "eventList":[
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+  ],
   "managed":true,
   "managed":true,
   "name":"oParentSolid",
   "name":"oParentSolid",
   "overriddenProperties":[],
   "overriddenProperties":[],

+ 1 - 0
objects/oPlayer/Draw_0.gml

@@ -18,6 +18,7 @@ if global.developer_mode
 	draw_set_halign(fa_left);
 	draw_set_halign(fa_left);
 	draw_set_valign(fa_middle);
 	draw_set_valign(fa_middle);
 	draw_set_font(fTest);
 	draw_set_font(fTest);
+	draw_set_colour(c_dkgray)
 	
 	
 	draw_text(x + 72, y - 96, script_get_name(state));
 	draw_text(x + 72, y - 96, script_get_name(state));
 	draw_text(x + 72, y - 48, sprite_get_name(sprite_index) + " " + string(image_index));
 	draw_text(x + 72, y - 48, sprite_get_name(sprite_index) + " " + string(image_index));

+ 1 - 1
rooms/rTest_2/rTest_2.yy

@@ -848,7 +848,7 @@
         {"$GMRInstance":"v4","%Name":"inst_72D10E65","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_72D10E65","objectId":{"name":"oBossHex","path":"objects/oBossHex/oBossHex.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":672.0,"y":896.0,},
         {"$GMRInstance":"v4","%Name":"inst_72D10E65","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_72D10E65","objectId":{"name":"oBossHex","path":"objects/oBossHex/oBossHex.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":672.0,"y":896.0,},
       ],"layers":[],"name":"Instances","properties":[],"resourceType":"GMRInstanceLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
       ],"layers":[],"name":"Instances","properties":[],"resourceType":"GMRInstanceLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
     {"$GMREffectLayer":"","%Name":"Effect","depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Effect","properties":[],"resourceType":"GMREffectLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
     {"$GMREffectLayer":"","%Name":"Effect","depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Effect","properties":[],"resourceType":"GMREffectLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
-    {"$GMRBackgroundLayer":"","%Name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4278190080,"depth":200,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Background","properties":[],"resourceType":"GMRBackgroundLayer","resourceVersion":"2.0","spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,},
+    {"$GMRBackgroundLayer":"","%Name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4294967295,"depth":200,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Background","properties":[],"resourceType":"GMRBackgroundLayer","resourceVersion":"2.0","spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,},
   ],
   ],
   "name":"rTest_2",
   "name":"rTest_2",
   "parent":{
   "parent":{

BIN
sprites/sLightCookie/43a7ac8f-e7f2-44a1-b0f8-6ad222254d99.png


BIN
sprites/sLightCookie/layers/43a7ac8f-e7f2-44a1-b0f8-6ad222254d99/fb9b7d7f-a6fc-47e9-b3a6-806f718c1c3d.png


+ 90 - 0
sprites/sLightCookie/sLightCookie.yy

@@ -0,0 +1,90 @@
+{
+  "$GMSprite":"v2",
+  "%Name":"sLightCookie",
+  "bboxMode":0,
+  "bbox_bottom":509,
+  "bbox_left":10,
+  "bbox_right":509,
+  "bbox_top":10,
+  "collisionKind":1,
+  "collisionTolerance":0,
+  "DynamicTexturePage":false,
+  "edgeFiltering":false,
+  "For3D":false,
+  "frames":[
+    {"$GMSpriteFrame":"v1","%Name":"43a7ac8f-e7f2-44a1-b0f8-6ad222254d99","name":"43a7ac8f-e7f2-44a1-b0f8-6ad222254d99","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+  ],
+  "gridX":0,
+  "gridY":0,
+  "height":512,
+  "HTile":false,
+  "layers":[
+    {"$GMImageLayer":"","%Name":"fb9b7d7f-a6fc-47e9-b3a6-806f718c1c3d","blendMode":0,"displayName":"default","isLocked":false,"name":"fb9b7d7f-a6fc-47e9-b3a6-806f718c1c3d","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
+  ],
+  "name":"sLightCookie",
+  "nineSlice":null,
+  "origin":0,
+  "parent":{
+    "name":"ddmyx",
+    "path":"ddmyx.yyp",
+  },
+  "preMultiplyAlpha":false,
+  "resourceType":"GMSprite",
+  "resourceVersion":"2.0",
+  "sequence":{
+    "$GMSequence":"v1",
+    "%Name":"sLightCookie",
+    "autoRecord":true,
+    "backdropHeight":768,
+    "backdropImageOpacity":0.5,
+    "backdropImagePath":"",
+    "backdropWidth":1366,
+    "backdropXOffset":0.0,
+    "backdropYOffset":0.0,
+    "events":{
+      "$KeyframeStore<MessageEventKeyframe>":"",
+      "Keyframes":[],
+      "resourceType":"KeyframeStore<MessageEventKeyframe>",
+      "resourceVersion":"2.0",
+    },
+    "eventStubScript":null,
+    "eventToFunction":{},
+    "length":1.0,
+    "lockOrigin":false,
+    "moments":{
+      "$KeyframeStore<MomentsEventKeyframe>":"",
+      "Keyframes":[],
+      "resourceType":"KeyframeStore<MomentsEventKeyframe>",
+      "resourceVersion":"2.0",
+    },
+    "name":"sLightCookie",
+    "playback":1,
+    "playbackSpeed":30.0,
+    "playbackSpeedType":0,
+    "resourceType":"GMSequence",
+    "resourceVersion":"2.0",
+    "showBackdrop":true,
+    "showBackdropImage":false,
+    "timeUnits":1,
+    "tracks":[
+      {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"43a7ac8f-e7f2-44a1-b0f8-6ad222254d99","path":"sprites/sLightCookie/sLightCookie.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"92a93ed6-4fdc-4541-9be7-a5d497e9d42b","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+          ],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+    ],
+    "visibleRange":null,
+    "volume":1.0,
+    "xorigin":0,
+    "yorigin":0,
+  },
+  "swatchColours":null,
+  "swfPrecision":0.5,
+  "textureGroupId":{
+    "name":"Default",
+    "path":"texturegroups/Default",
+  },
+  "type":0,
+  "VTile":false,
+  "width":512,
+}