Тёмный

Isometric Madness - Random Live Game Dev - 2024-07-09 

gingerBill
Подписаться 10 тыс.
Просмотров 3,4 тыс.
50% 1

Broadcasted live on Twitch -- Watch live at / ginger_bill

Игры

Опубликовано:

 

9 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 17   
@handmadegamesdev
@handmadegamesdev 22 дня назад
This is great! Very glad to see you streaming again.
@Pariatech
@Pariatech 22 дня назад
Isometric is the superior projection.
@vincentole
@vincentole 12 дней назад
Great video! Its a very nice learning experience to see you do game dev in Odin.
@KodosUnofficial2-jq5oo
@KodosUnofficial2-jq5oo 22 дня назад
glad to see you back!
@thalesr6916
@thalesr6916 22 дня назад
the MAN is back!
@CODEDSTUDIO
@CODEDSTUDIO 22 дня назад
I really like how you just import Raylib or any other vendor lib without the headache of setuping things, is a blessing
@_iao_
@_iao_ 19 дней назад
wtf?! missed this, but glad you're back to streaming.
@freezingcicada6852
@freezingcicada6852 20 дней назад
2:10:29 I have no idea what any of the Blend modes in Raylib does outside Depth Test enabled, but I needed to discard alpha value to get illusion of depth thing going on too.
@mostrealtutu
@mostrealtutu 20 дней назад
Dunjen 2.0 let's go :)
@HairyPixels
@HairyPixels 22 дня назад
The easy way to sort: If you have no elevation in your maps and your sprites are not wider then they are tall, keep all your entities in a matrix where each entity can belong to one map tile. Then within each tile which needs updating sort all entities by Y-position by a circle which roughly corresponds to it's "footprint". If you need something more accurate then you need to make functions which map screen position to world position and they sort on world position by adding the X,Y components together. The secret to 2D isometric is to not make arbitrary sprite sizes. If you want to support Z-coordinates and layers it's better to go 3D. I learned this all the hard way, believe me. :)
@GingerGames
@GingerGames 21 день назад
As I kept saying on the stream, I do not want to sort on the CPU, I wanted to sort with the depth buffer. Sorting on the CPU is trivial but why should I need to do that in this case?
@CODEDSTUDIO
@CODEDSTUDIO 22 дня назад
💯🙌❤
@10bokaj
@10bokaj 22 дня назад
first
@HairyPixels
@HairyPixels 22 дня назад
Here's a WorldToView to function which takes a world space coord and translates to view (screen) space given the world tile sizes. In Pascal: function WorldToView(x, y, z: TScalar): TVec2; var tileCoord: TVec3; begin with World do begin // convert pixel coords to tile coords tileCoord := V3(x / tileDim, y / tileDim, z / tileDepth); // convert tile coord to screen coords result.x := (tileCoord.x - tileCoord.y) * halfTileWidth; result.y := (tileCoord.x + tileCoord.y) * halfTileHeight; result.y -= (tileCoord.z * tileDepth); // offset to top-left of bottom result.y += halfTileHeight; end; end;
@joyousblunder
@joyousblunder 3 дня назад
hey bill, awesome live. I was trying to copy it but right from the start the load_directory_of_textures proc fails unless I comment the line delete(match). since it seems to work on windows and not on ubuntu do you think there is a memory related bug somewhere in odin? package main import "core:fmt" import "core:path/filepath" import "core:strings" import rl "vendor:raylib" TILE_WIDTH :: 256 TILE_HEIGHT :: 128 TILE_FULL_HEIGHT :: 512 load_directory_of_textures :: proc(pattern: string) -> map[string]rl.Texture2D { textures := make(map[string]rl.Texture2D) matches, _ := filepath.glob(pattern) for match in matches { path, _ := strings.replace_all(match, "\\", "/") textures[path] = rl.LoadTexture(fmt.ctprintf("%s", path)) } for match in matches { // delete(match) } delete(matches) return textures } unload_directory_of_textures :: proc(textures: map[string]rl.Texture2D) { for path, tex in textures { rl.UnloadTexture(tex) } delete(textures) } main :: proc() { rl.SetTraceLogLevel(.ERROR) rl.SetConfigFlags({.MSAA_4X_HINT, .WINDOW_HIGHDPI, .VSYNC_HINT, .FULLSCREEN_MODE}) rl.InitWindow(1920, 1080, "The Dunjun 2D") defer rl.CloseWindow() scene_textures := load_directory_of_textures("res/image/scene/*.png") defer unload_directory_of_textures(scene_textures) camera := rl.Camera2D { target = {0, 0}, rotation = 0, zoom = 1, } rl.SetTargetFPS(144) for !rl.WindowShouldClose() { free_all(context.temp_allocator) rl.BeginDrawing();defer rl.EndDrawing() rl.ClearBackground({128, 180, 255, 255}) floor, ok := scene_textures["res/image/scene/stone_N.png"] fmt.println(ok) for i in 0 ..< i32(1000) { x, y := i32(i % 16), i32(i / 16) x *= TILE_WIDTH y *= TILE_HEIGHT y -= TILE_FULL_HEIGHT - TILE_HEIGHT rl.DrawTexture(floor, x, y, rl.WHITE) } rl.DrawFPS(10, 10) } }
Далее
Best exercises to lose weight ! 😱
00:19
Просмотров 12 млн
🛑 до конца!
00:12
Просмотров 86 тыс.
ROCKET that LITERALLY BURNS WATER as FUEL
19:00
Просмотров 1,8 млн
The Formula for Replayable Games
18:44
Просмотров 234 тыс.
Andrew Kelley   Practical Data Oriented Design (DoD)
46:40
Odinlang Creator Ginger Bill Talks Odin!
51:05
Просмотров 77 тыс.
It's Hard To Make Games
18:01
Просмотров 141 тыс.
Optimizing my Game so it Runs on a Potato
19:02
Просмотров 512 тыс.
Linus Torvalds on why desktop Linux sucks
11:07
Просмотров 1,2 млн
5 Вырезанных Боссов - STALKER
9:24
Просмотров 155 тыс.